我有一个非常简单的服务器用于集成测试,使用 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 内置的功能?