Это мой первый раз с ЕМ, так что я действительно нужна помощь здесьрубин 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
откладывается, что означает, что он не будет блокировать реактор. Но когда я пытаюсь выполнить 50 одновременных соединений с ab
, он одновременно служит ~ 20 (согласно сообщению ab
).
Но если я поместил process_queue
исполнение внутри EM.defer
(что означает, что он будет работать в отдельной теме?), Он выполняет все отлично.
Почему это так? process_queue
просто вписывает отложенный объект и назначает обратный вызов, как работает его внутри EM.defer
?
wow, exectly, что мне нужно. Большое спасибо! –