2

我发现很难从 Rails 3 中找到有关长轮询的信息。我们有一种情况,移动应用程序从 Rails JSON API 请求某些内容,而后者又从外部 API 请求某些内容。外部服务器保持状态在大约 30 秒后发生变化,Rails 服务器需要等待该变化并通知应用程序。在我看来,我们有两个选择:

  1. 移动应用程序通过调用 /resource/status 之类的东西来轮询 Rails 服务器。当 Rails 服务器收到这个请求时,它会检查外部服务器上的状态,并将其返回给移动应用程序,由移动应用程序决定状态是否“准备就绪”

  2. 移动应用程序向 Rails 服务器发送请求。Rails 服务器(以某种方式)轮询外部服务器,并且只要状态“准备就绪”,就会向移动应用程序发送推送

我理解 cronjobs 的任何时候 gem,但这更像是“每 X 秒执行一次,直到它准备好”之类的事情......并不真正适合 cronjob,因为轮询只在很短的时间内发生。我真正需要的是一个带有调用的循环sleep。这种方法必须为每个请求创建一个新线程,对吧?Rails 是否适合这些多线程需求?

网上有很多文章暗示 Rails 和多线程不混用,其中一些取决于你部署在什么服务器上,但我很难判断这些文章的有效性,特别是因为其中一些已经结束一岁。

所以我想底线是:我们应该选择选项#1,这似乎是最简单的选项吗?或者#2,这更有意义,因为服务器正在完成所有工作,而移动应用程序只是等待推送?如果 #2,从 Rails 应用程序执行这种长轮询的最佳方法是什么?

4

0 回答 0