Handlerというクラスを定義して、
Handler::handle(head, method, action, content);というメソッドで適当に料理してください。
標準出力に書くとブラウザに送られると思います。‥‥‥というのは勘違いで、 メソッドの返り値の文字列が送られるんでした。_o_
wwwsrvやるより、一から動かせるだけの最低限分を書いた方がいいかも。
require 'socket' require 'timeout' class AyashiiServer # サーバーの初期化。ポートを開いて待ち続ける def initialize(port, handler) $handler = handler serverSocket = TCPserver.open(port) while true begin socket = serverSocket.accept process(socket) rescue print "an error occered.\n" end end end # 一つのセッションを処理する。 def process(socket) begin head, method, action, content = readRequest(socket) response = serve(head, method, action, content) sendResponse(socket, response) ensure socket.close end end # リクエストを読む def readRequest(socket) action = '' method = '' head = {} while(true) str = nil begin timeout(1) { str = socket.gets } rescue TimeoutError raise end break unless str str.chop! if str =~ /^(get|post) \/(\S*)/i then method = $1 action = $2 end if str =~ /^(\S+):\s*(.*)$/ then key = $1.downcase head[key] = $2 elsif str =~ /^\s*$/i then break end end content = '' if head['content-length'] && head['content-length'].to_i > 0 then content = socket.read(head['content-length'].to_i) end return [head, method, action, content] end # リクエストを処理する def serve(head, method, action, content) return $handler.handle(head, method, action, content) end # レスポンスを送信する def sendResponse(socket,result) if result.type == Array then head = result[0] content = result[1] else head = {} content = result end head['Content-length'] = content.length.to_s head['Content-Type'] = 'text/html' head['Cache-Control'] = 'no-cache' head['Date'] = Time.new.to_s head['Server'] = ServerVersion header = '' head.each{|k,v| header += k + ": " + v + "\r\n" } socket.write("HTTP/1.1 200 OK\r\n") socket.write(header + "\r\n" + content) end end