从Rails 3.2轮询外部应用程序

时间:2012-12-06 23:51:45

标签: ruby-on-rails ruby-on-rails-3 multithreading long-polling ruby-1.9.3

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

  1. 移动应用程序通过调用/ resource / status之类的方式轮询Rails服务器。当Rails服务器收到此请求时,它会检查外部服务器上的状态,并将其返回给移动应用程序,移动应用程序决定状态是否“足够”

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

  3. 我理解cronjobs的每当宝石,但这更像是“每隔X秒做一次,直到它准备就绪”的东西......不太适合cronjob,因为轮询只在很短的时间内发生。我真正需要的是一个调用sleep的循环。这个方法必须为每个请求创建一个新线程,对吧? Rails是否适合满足这些多线程需求?

    网上有很多文章暗示Rails和多线程不混合,其中一些取决于你正在部署的服务器,但我很难说这些文章的有效性,特别是因为一些他们已经一岁多了。

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

0 个答案:

没有答案