【问题标题】:Rails: SetTimeout Polling or Pubnub/Pusher?Rails:SetTimeout 轮询还是 Pubnub/Pusher?
【发布时间】:2012-09-02 10:13:07
【问题描述】:

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

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

我的问题是,在什么时候我需要使用推送服务,例如 Pubnub/Pusher,而不是 ajax 间隔调用?或者更好的是,我怎样才能摆脱 ajax 间隔调用(可能每 30 秒或每分钟调用一次)? (无论如何,在乞讨中使用 ajax 是否更聪明,然后如果我被流量淹没,则升级到服务?)

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

【问题讨论】:

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


    【解决方案1】:

    我的问题是,在什么时候我需要使用推送服务,例如 Pubnub/Pusher,而不是 ajax 间隔调用?或者更好的是,我怎样才能摆脱 ajax 间隔调用(可能每 30 秒或每分钟调用一次)? (无论如何,在乞讨中使用 ajax 是否更聪明,然后如果我被流量淹没,则升级到服务?)

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

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

    您是否应该为应用的实时基础架构部分使用托管服务实际上取决于:

    1. 如果通知的实时性很重要,并且您想使用 WebSockets,那么您最好的解决方案是使用托管服务。
    2. 在查看您将产生的成本时,需要考虑您将拥有的用户数量和更新频率。正如我之前所说,这将影响您需要多长时间将 Heroku Dynos 添加到您的应用程序中。如果您根据应用的可能资源使用情况进行一些汇总,您可能会大致了解使用轮询并支付更多 Dynos 或将实时基础架构卸载到托管服务是否更具成本效益。

    自从我为 Pusher 工作以来,我显然相信将实时基础架构卸载到以 WebSocket 为中心的服务的好处是巨大的。在权衡利弊时,还应考虑强大社区的好处,良好的development toolingdocs。如果成本是个问题,那么我知道Pusher support 是联系并询问潜在折扣/交易的好地方。

    【讨论】:

    • 感谢您的回答。我会使用 Pusher,但是对于如此小的连接,此时的成本感觉相当高。如果该服务仅基于发送的消息(如 Pubnub heroku 插件),那将是一个简单的决定。问题是我期待很多用户(我需要连接),但没有那么多帖子。我不立即使用 PubNub 的唯一原因是 b/c 他们的文档很差。再次感谢您的彻底回答。我想我会开始轮询,然后在必要时转移到服务。
    • 哦,我应该提到轮询实际上可以为您的代码和 Web 应用程序架构增加额外的复杂性(嗯,至少是更多的代码)。看看这些幻灯片,其中涵盖了轮询 v Push 场景所需的代码以及资源使用情况:leggetter.co.uk/pusher/pusher-presentations/… 虽然它专注于 Pusher,但它也适用于其他实时网络技术解决方案。
    【解决方案2】:

    在 Heroku 上使用 Rails 通知 PubNub 实时事件

    您正在询问一种开始使用 PubNub 的简单方法,以便在您的 Web 应用程序中构建推送更新(如 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

    这些链接提供了类似于 Facebook 的窗口框的示例,该窗口框通过 PubNub 向您的用户通知自定义消息。您可以在他们的手机或浏览器上向您的用户发送更新。这将向您的用户显示通知;任何通知你。 接下来,如果您想添加安全性 - 请注意 PubNub 仅为单用户频道提供安全性。群组频道基本上是公共广播,目前无法在广播模式下锁定数据。

    【讨论】:

      猜你喜欢
      • 2013-10-17
      • 2011-04-20
      • 2016-02-24
      • 2010-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-01
      相关资源
      最近更新 更多