WEBrick独書会 第3回

さぁ、はじまるザマスよ!
(個人用雑記が)


webrickの中身を読む前に、本家 http://www.webrick.org/
Daytime Serverのexampleを読んで行きます。

require 'webrick'

s = WEBrick::GenericServer.new( :Port => 2000 )
trap("INT"){ s.shutdown }
s.start{|sock|
sock.print(Time.now.to_s + "\r\n")
}


これを実行した後、ブラウザで http://localhost:2000/ を開くと
ギャッ!っと現在の時間が表示されるかと思います。
たった6行のスクリプトですが、rubywebrickの強力さ加減がわかるかと。
では、このexampleを1行ずつ見て行きます。


require 'webrick'
まずは、webrickライブラリを使えるようにrequireしています。


s = WEBrick::GenericServer.new( :Port => 2000 )
次にGenericServerクラスのオブジェクトをインスタンス化します。
引数にはconfigを指定できて、例ではポート番号2000っちゅうのを指定。


trap("INT"){ s.shutdown } 
OSが用意しているシグナルっていう、一般的なプロセス間通信機能がありまして、
Ctrl-cが押されると、rubyインタプリタのプロセスにSIGINTっちゅう、シグナルが飛んできます。
それを受けた場合に先ほどインスタンス化したオブジェクトの
shutdownメソッドが呼び出されるように準備しています。


少し逸れて、trapはSignalクラスのクラスメソッドです。
trapって書くのと、Signal.trap って書くのは同じです。
何でいきなりtrapって関数っぽく書けるかっていうのは、
関数っぽく書けるように、Kernelモジュールで定義されているためです。
http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=%C1%C8%A4%DF%B9%FE%A4%DF%B4%D8%BF%F4


s.start{|sock|
sock.print(Time.now.to_s + "\r\n")
}
最後にstartメソッド呼び出してexampleは終わりです。
時間と改行コードを出力するようなブロックをstartメソッドで渡しています。


次回以降は今回出てきたGenericServerのnew,start,shutdownを
見ていきたいと思います。