0

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

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

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

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

4

2 回答 2

1

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

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

gem install pubnub

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

在继续之前,请务必注意,以下链接只会为您提供一个起点,用于参考或将演示转变为您需要的内容。复制源代码(在Stackoverflow 实时更新答案中找到)并阅读参考链接以了解如何开始。此外,如果您需要详细的帮助,您可以随时在 Twitter 上联系http://twitter.com/pubnub @PubNub。

  1. Stackoverflow 链接 -想使用 PubNub 向用户的网络浏览器发送实时更新
  2. 一般博客 -用于类似 Facebook 的通知和私人内容的 PubNub 设置

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

于 2012-09-04T23:53:26.557 回答
1

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

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

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

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

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

由于我为 Pusher 工作,我显然相信将实时基础架构卸载到以 WebSocket 为中心的服务的好处是很高的。在权衡利弊时,还应考虑强大社区、良好开发工具文档的好处。如果成本是个问题,那么我知道Pusher 支持是联系并询问潜在折扣/交易的好地方。

于 2012-09-09T10:37:15.613 回答