여러 사이트의 데이터를 한꺼번에 집계하는 클래스를 만들고 있습니다. 요청을 병렬로 모든 사이트에 보내고 결과를 수집 한 다음 호출자에게 반환해야합니다. aggregate
메서드가 반환 될 때까지 모든 호출이 완료되어야합니다.EventMachine :: Multi 요청에 대한 차단
또한이 메서드는 Rails 컨트롤러의 컨텍스트에서 실행되며, 이벤트가 발생한 웹 서버에서 실행 중이거나 실행 중이 아닐 수도 있습니다.
코드의 순수한 EM 기반 버전은 다음과 같이
class DataAggregator
def aggregate(artist)
multi = EventMachine::MultiRequest.new
EventMachine.run do
multi.add :a, EventMachine::HttpRequest.new("http://www.postrank.com").get
multi.add :b, EventMachine::HttpRequest.new("http://www.google.com").get
multi.add :c, EventMachine::HttpRequest.new("http://www.github.com").get
multi.add :d, EventMachine::HttpRequest.new("http://www.yahoo.com").get
multi.add :e, EventMachine::HttpRequest.new("http://www.facebook.com").get
multi.callback do
puts "Done!"
EventMachine.stop unless defined?(Thin)
end
end
# Not optimal, but I don't see any way to do this otherwise.
unless multi.finished?
sleep 0.1
end
end
end
내가 코드를 두 가지 문제가 있습니다
이 씬에서 행동 갈 수있는 방법이 있나요 ? Thin은 이미 이벤트 루프를 가지고 있기 때문에 다중 요청의 완료시 차단은 위에 쓴 것처럼 끝나지 않을 것입니다. 하지만 여전히 멀티 요청이 완료되면 차단하여
aggregate
에서 돌아 오기를 원합니다. 즉, EventMachine 내에 EventMachine이 필요합니다.폴링이 대답이 아닙니다. 거기에 다른 방법으로 쓸 수 있습니까?