我正在开发一个允许用户发布的rails应用程序,就像facebook或stackoverflow一样。我想实现一个警报系统,让用户知道何时添加了新帖子(就像在stackoverflow中一样)。
现在,我将部署到heroku。这带来了一些问题,例如heroku不支持websockets。如果我想要websocket支持,我将不得不通过Pusher或Pubnub付费 - 昂贵的服务。但是,我不太确定我需要那种设置。我可能能够通过长轮询(通过ajax请求,经常使用自调用setTimeout)来逃避。
我的问题是,在什么时候我需要使用诸如Pubnub / Pusher之类的推送服务而不仅仅是ajax间隔调用?或者更好的是,我怎样才能通过ajax间隔呼叫(每30秒或每分钟调用一次)? (无论如何在乞讨中使用ajax更聪明,如果我被流量淹没,那么升级到服务吗?)
我的更新不一定是实时的,但我希望尽快。
答案 0 :(得分:1)
您正在询问一种简单的方法来开始使用PubNub在您的Web应用程序中构建Push更新(如Stackoverflow)。您使用 Heroku 并将通过Ruby发送更新事件。使用PubNub很容易实现。首先,您需要访问 PubNub Ruby Gem 。
gem install pubnub
接下来,您需要通过PubNub JavaScript在您的网络应用上接收更新。我有一个起点,我将附上一些链接:
这些链接提供了类似Facebook的窗口框的示例,该窗口框通过PubNub通过自定义消息通知您的用户。您可以在移动电话或浏览器上向用户发送更新。这将向您的用户显示通知;任何通知你。 接下来,如果要添加安全性 - 请注意,PubNub仅为单用户通道提供安全性。群组频道基本上是公共广播,目前无法以广播模式锁定数据。
答案 1 :(得分:1)
我的问题是,在什么时候我需要使用诸如Pubnub / Pusher之类的推送服务而不仅仅是ajax间隔调用?或者更好的是,我怎样才能通过ajax间隔呼叫(每30秒或每分钟调用一次)? (无论如何在乞讨中使用ajax更聪明,如果我被流量淹没,那么升级到服务吗?)
通过使用像Heroku这样的服务,这意味着您正在减轻Web托管环境的痛苦。这意味着随着您的服务变得流行,它将为您处理扩展。如果您使用任何形式的轮询,则需要尽快扩展服务的Heroku部分,因为轮询请求会消耗更多资源。
轮询效率可能低得多,但实际上取决于用户查看更新的频率。如果更新相当频繁,那么轮询请求确实会返回数据,而实时并不重要,那么轮询可能是一个可接受的解决方案。但这确实意味着通知不会是即时的。
您是否应该将托管服务用于应用的实时基础架构部分,这取决于:
由于我为Pusher工作,我显然认为将实时基础设施卸载到以WebSocket为中心的服务的好处很高。在权衡利弊时,还应考虑强大社区,好development tooling和docs的好处。如果费用有问题,那么我知道Pusher support是一个与我们保持联系并询问潜在折扣/优惠的好地方。