eventmachine を使用して構築された、統合テストで使用するための非常に単純なサーバーがあります。
EM.run do
EM::start_server(server, port, HttpRecipient)
end
HTTP リクエストを受信して、次のように解析できます。
class HttpRecipient < EM::Connection
def initialize
@@stored = ''
end
# Data is received in chunks, so here we wait until we've got a full web request before
# calling spool.
def receive_data(data)
@@stored << data
begin
spool(@@stored)
EM.stop
rescue WEBrick::HTTPStatus::BadRequest
#Not received a complete request yet
end
end
def spool(data)
#Parse the request
req = WEBrick::HTTPRequest.new(WEBrick::Config::HTTP)
req.parse(StringIO.new(@@stored))
#Send a response, e.g. HTTP OK
end
end
問題は、どのように応答を送信するかです。Eventmachine はsend_data
応答を送信するための を提供しますが、それは http を理解していません。同様に、em-http-request
リクエストを送信するためのモジュールがありますが、これがレスポンスを生成できるかどうかは明らかではありません。
HTTP メッセージを手動で生成して を使用して送信することはできますsend_data
が、既存の http ライブラリまたは eventmachine に組み込まれている機能を使用するクリーンな方法があるのだろうか?