2

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 に組み込まれている機能を使用するクリーンな方法があるのだろうか?

4

1 に答える 1