= WEBrick::GenericServerの動作 = リファレンスには使い方ほとんど乗ってないので使い方の説明。 ただし僕もリファレンス読んで多少使ってソースの関係有そうなところ見た程度なので大した内容はかけないし正確じゃないかもしれない。あしからず。 1. とりあえずWEBrick::GenericServerを継承したクラスを作る。走らせるのはこのクラスのインスタンス。 2. WEBrick::GenericServerを継承して作ったクラスにrunメソッドを定義する。runメソッドはTCPSocketを引数にとる。 こんな感じ。 {{{#!highlight ruby class Server < WEBrick::GenericServer def run(sock) // ほげほげ end end }}} あとはServer.newして返ってきたインスタンスのstartインスタンスメソッド呼ぶだけ。 WEBrick::GenericServerのイニシャライザはHashを引数にとる。これの:Port要素にポート番号を指定しないと動かないので注意。 === 実際に接続した時のWEBrick::GenericServerのサブクラスは以下のように動作する === クライアントA(仮)が接続 ー> Threadを作成 ー> 作成したThreadでrunが呼ばれる。runに与える引数はAと通信するTCPSocket   === 頑張ればチャットサーバーとして使えなくもないサーバー === 使うにはtelnetで6667番ポートに接続する。ちなみに6667番ポートはIRCがよく使うポート。 {{{#!highlight ruby require 'webrick/server' class Server < WEBrick::GenericServer def initialize(config={:Port => 6667}) @clients = [] super(config) Signal.trap(:INT) do exit! end end def run(socket) @clients << socket socket.print('What is your name?: ') nick = socket.gets.chomp loop do s = socket.gets puts("#{nick}: #{s}") @clients.each do |client| client.puts("#{nick}: #{s}") end end end end Server.new.start }}}