Rails:SetTimeout Polling还是Pubnub / Pusher?

时间:2012-09-02 10:13:08

标签: ruby-on-rails ruby-on-rails-3 heroku

我正在开发一个允许用户发布的rails应用程序,就像facebook或stackoverflow一样。我想实现一个警报系统,让用户知道何时添加了新帖子(就像在stackoverflow中一样)。

现在,我将部署到heroku。这带来了一些问题,例如heroku不支持websockets。如果我想要websocket支持,我将不得不通过Pusher或Pubnub付费 - 昂贵的服务。但是,我不太确定我需要那种设置。我可能能够通过长轮询(通过ajax请求,经常使用自调用setTimeout)来逃避。

我的问题是,在什么时候我需要使用诸如Pubnub / Pusher之类的推送服务而不仅仅是ajax间隔调用?或者更好的是,我怎样才能通过ajax间隔呼叫(每30秒或每分钟调用一次)? (无论如何在乞讨中使用ajax更聪明,如果我被流量淹没,那么升级到服务吗?)

我的更新不一定是实时的,但我希望尽快。

2 个答案:

答案 0 :(得分:1)

使用Heroku上的Rails进行PubNub实时事件通知

您正在询问一种简单的方法来开始使用PubNub在您的Web应用程序中构建Push更新(如Stackoverflow)。您使用 Heroku 并将通过Ruby发送更新事件。使用PubNub很容易实现。首先,您需要访问 PubNub Ruby Gem

gem install pubnub

接下来,您需要通过PubNub JavaScript在您的网络应用上接收更新。我有一个起点,我将附上一些链接:

在继续之前,请务必注意以下链接仅为您提供参考或将演示变形为所需内容的起点。复制源代码(在Stackoverflow real-time updates answer中找到)并阅读参考链接以了解如何开始。此外,如果您需要详细的帮助,您可以随时联系Twitter上的http://twitter.com/pubnub @PubNub。

  1. Stackoverflow链接 - Would like to use PubNub to send real-time updates to the user's web browser
  2. 一般博客 - PubNub setup for Facebook-like notifications and private content
  3. 这些链接提供了类似Facebook的窗口框的示例,该窗口框通过PubNub通过自定义消息通知您的用户。您可以在移动电话或浏览器上向用户发送更新。这将向您的用户显示通知;任何通知你。 接下来,如果要添加安全性 - 请注意,PubNub仅为单用户通道提供安全性。群组频道基本上是公共广播,目前无法以广播模式锁定数据。

答案 1 :(得分:1)

  

我的问题是,在什么时候我需要使用诸如Pubnub / Pusher之类的推送服务而不仅仅是ajax间隔调用?或者更好的是,我怎样才能通过ajax间隔呼叫(每30秒或每分钟调用一次)? (无论如何在乞讨中使用ajax更聪明,如果我被流量淹没,那么升级到服务吗?)

通过使用像Heroku这样的服务,这意味着您正在减轻Web托管环境的痛苦。这意味着随着您的服务变得流行,它将为您处理扩展。如果您使用任何形式的轮询,则需要尽快扩展服务的Heroku部分,因为轮询请求会消耗更多资源。

轮询效率可能低得多,但实际上取决于用户查看更新的频率。如果更新相当频繁,那么轮询请求确实会返回数据,而实时并不重要,那么轮询可能是一个可接受的解决方案。但这确实意味着通知不会是即时的。

您是否应该将托管服务用于应用的实时基础架构部分,这取决于:

  1. 如果通知的实时性很重要,并且您想使用WebSockets,那么您最好的解决方案是使用托管服务。
  2. 在查看您将产生的费用时,需要考虑您拥有的用户数量和更新频率。正如我之前所说,这将影响你需要多久才能将Heroku Dynos添加到你的应用程序中。如果您根据应用程序的可能资源使用情况进行一些总结,那么您可以大致了解一下,如果使用轮询并支付更多Dynos或将实时基础架构卸载到托管服务更具成本效益。
  3. 由于我为Pusher工作,我显然认为将实时基础设施卸载到以WebSocket为中心的服务的好处很高。在权衡利弊时,还应考虑强大社区,好development toolingdocs的好处。如果费用有问题,那么我知道Pusher support是一个与我们保持联系并询问潜在折扣/优惠的好地方。