[英]Ruby HTTP server without networking
我試圖將HTTP服務器添加到現有的Ruby應用程序。 該應用程序基於一個select
循環,我也想在那里處理傳入的HTTP請求(在同一個線程中處理請求很重要,否則我必須跳過循環將其封送在那里)。
Ruby為獨立的HTTP服務器提供了許多解決方案,但是我似乎找不到在現有套接字上實現HTTP服務器的庫。 我不希望HTTP庫打開端口並等待,我想向其提供套接字。
我正在尋找的基本邏輯是:
handler = SomeHTTPParsingLibrary.new
# set up handler callbacks, etc on handler...
while socket = get_incoming_connection()
handler.handle_request(socket)
end
是否有現有的Ruby庫可以像這樣工作? HTTP是一個足夠簡單的協議,但是涉及很多令人討厭的細節(我需要Cookie,基本身份驗證等),而我不想自己動手。
您可能需要HTTPParser
找出要調用的方法,但是我建議從mongrel中嘗試HTTPParser
類。
快速瀏覽httprequest.rb
的代碼( httprequest.rb
來自ruby stdlib)似乎很適合您的目的。
WEBrick::HTTPRequest
對象能夠接受套接字作為其parse()
方法的參數。 然后它將阻塞,並在請求對象已完全用傳入的HTTP請求填充時返回。
例如:
res = HTTPResponse.new(@config)
req = HTTPRequest.new(@config)
# some code to "select" a socket goes here
# sock is active, hand it over to the req object for reading.
req.parse(sock)
res.request_method = req.request_method
當然,這假設此線程將阻塞當前請求的處理完成。
OTOH,諸如tmm1/http_parser.rb
類的tmm1/http_parser.rb
也可能滿足您的需求,但為了提高速度而犧牲了其他內容(例如處理Cookie)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.