异步请求rails apache / phusionpassenger

时间:2013-05-16 09:19:03

标签: apache asynchronous ruby-on-rails-3.2 passenger thin

我已经实现了一个控制器方法,该方法向第三个parry API提出了几个请求,这非常慢。此外,我使用了Thin的异步功能之一:

# This informs thin that the request will be handled asynchronously
self.response_body = ''
self.status = -1
Thread.new do
  # This will be the response to the client
  env['async.callback'].call('200', {}, "Response body")
end

(blog post about it)

但是我很好奇是否可以在不使用Thin的情况下实现,或者如果可以通过Apache / Phusionpassenger实现更精确的话。

任何建议,指示,链接,评论或答案都表示赞赏。感谢

1 个答案:

答案 0 :(得分:0)

现在还不确定乘客4是否可行。this article他们宣布完成了 重新设计以支持事件模型。因为他们也有计划支持Node.js,我希望上面的方法可以工作。

但是,如果你从他们那里看this post,他们会清楚地说:

  

...还有另一种支持高I / O并发的方法:多线程......

     

因此,这使得多线程服务器成为处理Rails应用程序中流媒体支持的唯一重要选项....

Rails不是为事件流程模型设计的,但它很好地支持多线程模型。乘客企业可以实现多线程的结构化。

另一种选择可能是将此问题提取到另一个应用程序(请参阅Railscast)。 因此,例如,您可以通过在后台作业中处理此请求来解决此问题,而不是直接调用控制器中的3d方api,这将花费大量时间来阻止I / O调用。用户将得到一个临时响应,然后直接订阅一些faye消息通道。在后台作业中,当三方通话准备就绪时,您将此通道上的响应发布给faye。 利润。