在Sidekiq工作者中使用Eventmachine http请求

时间:2012-11-13 17:23:39

标签: ruby sinatra eventmachine sidekiq

所以假设我有一个sidekiq进程发送一个我不想等待的http post请求。我不希望这成为工人速度的阻碍。

我的一个想法是将这个简单的示例代码用于EventMachine Http Request

  EventMachine.run do
    http = EventMachine::HttpRequest.new("http://www.example.com").post :options => {...}
    http.callback do
      puts "got a response"
      puts http.response
      EventMachine.stop
    end
    puts "worker finished"
  end

所以我们假设我的工作进程在调用回调之前完成。这会发生什么?这是否意味着回调的指针会失败?我想了解这里的控制流程。

2 个答案:

答案 0 :(得分:2)

在致电EventMachine.run之前,EventMachine.stop区块不会返回。因此,在您的情况下,如果没有运行回调,工作人员将无法完成。

答案 1 :(得分:2)

根据您的需要:

  1. 您想利用CPU
    Sidekiq工人非常轻量级。在等待响应时,您可以运行更多这些来利用CPU。
  2. 您希望工作人员更快地完成 您可以将每个请求排入队列,以便由不同的工作人员进行处理。它就像EM中的next_tick()。 我对Sidekiq和Celluloid感到兴奋,因为它改变了我们的思维方式。 http://www.slideshare.net/KyleDrake/hybrid-concurrency-patterns?utm_source=rubyweekly&utm_medium=email