WEBrick独書会 第5回
前回から4ヶ月ほど経っていますが、何事もなく続けます。
どこからか。って言うとGenericServerのinitializeメソッドの途中、
@tokens = ...っていう所からです。
def initialize(config={}, default=Config::General) @config = default.dup.update(config) @status = :Stop @config[:Logger] ||= Log::new @logger = @config[:Logger] @tokens = SizedQueue.new(@config[:MaxClients]) @config[:MaxClients].times{ @tokens.push(nil) } webrickv = WEBrick::VERSION rubyv = "#{RUBY_VERSION} (#{RUBY_RELEASE_DATE}) [#{RUBY_PLATFORM}]" @logger.info("WEBrick #{webrickv}") @logger.info("ruby #{rubyv}") @listeners = [] unless @config[:DoNotListen] if @config[:Listen] warn(":Listen option is deprecated; use GenericServer#listen") end listen(@config[:BindAddress], @config[:Port]) if @config[:Port] == 0 @config[:Port] = @listeners[0].addr[1] end end end
@tokens = SizedQueue.new(@config[:MaxClients]) @config[:MaxClients].times{ @tokens.push(nil) }
いきなり@tokensっていうのがわかりませんなぁ。
SizedQueueは下記アドレスによるとthread操作に使うと便利なクラスの模様。
http://www.ruby-lang.org/ja/man/?cmd=view;name=SizedQueue
@config[:MaxClients]はlib/webrick/config.rb内のGeneral内で100になってるので、
大きさ100のキューを作って、キューは全てnilで埋めている。と。
webrickv = WEBrick::VERSION rubyv = "#{RUBY_VERSION} (#{RUBY_RELEASE_DATE}) [#{RUBY_PLATFORM}]" @logger.info("WEBrick #{webrickv}") @logger.info("ruby #{rubyv}")
webrickvとrubyvにWEBrickとRubyのバージョンを入れてます。
ここで、サーバを起動した時に表示されるバージョンを取得してるんやね。
Logインスタンスのinfoメソッドでバージョンをlogに残してる。
次回以降、早いうちにLogを読もう。
@listeners = [] unless @config[:DoNotListen] if @config[:Listen] warn(":Listen option is deprecated; use GenericServer#listen") end listen(@config[:BindAddress], @config[:Port]) if @config[:Port] == 0 @config[:Port] = @listeners[0].addr[1] end end
@listenersを空の配列で初期化。
@config[:DoNotListen]の初期値はfalseなので、unless内を実行。
@config[:Listen]はおそらく未定義なので、warnは実行されない。
warnは$stderrにメッセージ出力。
http://www.ruby-lang.org/ja/man/?cmd=view;name=%C1%C8%A4%DF%B9%FE%A4%DF%B4%D8%BF%F4;em=warn#warn
メッセージによると:Listenは廃止されたオプションとの事なので、未定義でokの模様。
listenメソッドからは。。
小分けだけど、次回へ。