使用ruby的异步HTTP请求

我有一个充满请求的rabbitmq队列,我想以异步方式将请求作为HTTP GET发送,而不需要等待每个请求响应。 现在我对什么是更好用,线程或只是EM感到困惑? 我现在使用它的方式类似于以下内容,但是很高兴知道这里是否有更好的性能以及更好的性能,因为它是该程序的一个非常重要的部分:

AMQP.start(:host => "localhost") do |connection| queue = MQ.queue("some_queue") queue.subscribe do |body| EventMachine::HttpRequest.new('http://localhost:9292/faye').post :body => {:message => body.to_json } end end 

使用上面的代码,系统是否会在开始下一个请求之前等待每个请求完成? 如果有任何提示,我会非常感激

HTTP是同步的,因此您必须等待回复。 如果您想模拟一个异步环境,您可以拥有一个线程池并将每个请求传递给一个等待回复的线程,那么返回池中直到下一个请求。 您可以向线程发送一个回调函数,以便在回复完成时使用,或者您将立即返回一个将来的回复对象,这样您就可以推迟等待回复,直到您确实需要回复数据为止。

另一种方法是拥有一个进程池,每个进程都处理一个请求,等待回复等。

在这两种情况下,你必须有一个足够大的游泳池,否则你仍然会在某些时候等待。