0

我已经实现了一个控制器方法,它向第三个招架 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

(关于它的博客文章)

但是我很好奇这是否可以在不使用 Thin 的情况下实现,或者更准确地说,是否可以使用 Apache/Phusionpassenger 来实现。

任何建议、指针、链接、评论或答案都将受到赞赏。谢谢

4

1 回答 1

0

不确定现在乘客 4 是否有可能。在这篇文章中,他们宣布已经进行了完整的重新设计以支持事件模型。因为他们也有计划支持 Node.js,所以我希望上述方法能够奏效。

但是,如果您从他们那里看这篇文章,他们会清楚地说:

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

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

Rails 并不是为事件进程模型设计的,但它很好地支持多线程模型。并且可以通过客企实现多线程sutup。

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

于 2014-01-09T08:29:04.643 回答