그래서 난 정말 여기 그래서 여기루비 eventmachine EM 내 처음이다
를 도움이 필요, 연기 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 개의 동시 연결을 실행하면 ab
보고서에 따라 동시에 20 개까지만 서비스합니다.
그러나 process_queue
실행을 EM.defer
(즉, 별도의 스레드에서 실행한다는 것을 의미합니까?)에 배치하면 잘 수행됩니다.
왜 그렇습니까? process_queue
그냥 연기 가능한 객체를 입력하고 콜백을 지정합니다. 어떻게 실행합니까? EM.defer
은 차이가 있습니까?
와우, exectly 무엇이 필요합니다. 고마워요! –