0
這是我第一次用EM所以我真的需要一些幫助這裏紅寶石EventMachine的http請求延期的
所以這裏的代碼:
EM.run do
queue = EM::Queue.new
EM.start_server('0.0.0.0', '9000', RequestHandler, queue)
puts 'Server started on localhost:9000' # Any interface, actually
process_queue = proc do |url|
request = EM::HttpRequest.new(url, connect_timeout: 1).get # No time to wait, sorry
request.callback do |http| # deferrable
puts http.response_header.status
end
queue.pop(&process_queue)
end
EM.next_tick { queue.pop(&process_queue) }
end
我讀了幾個關於EM的文章,現在我對以上代碼的理解如下:
EM::HttpRequest
是可推遲的,這意味着它不會阻塞反應堆。 但是,當我嘗試與ab
一起運行50個併發連接時,它只能同時服務~20個(根據ab
報告)。
但是,如果我將process_queue
執行放在EM.defer
(這意味着它將運行在一個單獨的線程中?)它執行得很好。
這是爲什麼? process_queue
只是一個可延遲的對象,並指定一個回調,如何在EM.defer
內運行它有所作爲?
哇,無論如何我需要。非常感謝! –