【问题标题】:WebSockets and Heroku: pushing data to the userWebSockets 和 Heroku:向用户推送数据
【发布时间】:2011-08-07 06:38:51
【问题描述】:

我正在使用 Ruby on Rails 构建一个实时 Web 应用程序,Heroku 似乎是托管它的最佳选择。

我宁愿在新数据可用时向用户推送新数据,而不是每隔几秒发送一次 AJAX 请求来拉取它。

Pusher 似乎是 Heroku 建议的此类工作,但它有一些限制,带来额外的成本,并使您依赖外部 API。

还有其他选项可以在 Heroku 上使用 WebSockets 吗?

【问题讨论】:

  • 我使用了一个名为 pubnub 的服务,它非常易于集成,但实际上取决于您发送的数据。 pubnub.com

标签: ruby-on-rails heroku websocket


【解决方案1】:

如果你想做 websockets,你需要使用除了 rails 之外的不同服务器。而且由于您在 heroku 上,因此您没有灵活性。

您可以选择在 ec2 微型实例上托管启用 websockets 的节点服务器。然后在您的 Rails 应用程序中,当您想要推送时——向节点服务器发出请求,它将转到客户端。

【讨论】:

  • 现在可以在 heroku devcenter.heroku.com/articles/…
  • @BrianArmstrong 与网络套接字有什么关系?
  • 如果您希望能够将内容推送到客户端,则不一定必须通过 websockets。像 socket.io 这样的大多数 websocket 库都能够回退到长轮询策略。 Heroku 不支持 WebSocket,但您可以将 socket.io 配置为不使用 Web 套接字,并获得 OP 正在寻找的相同类型的推送数据到客户端体验,而无需运行单独的服务器。
【解决方案2】:

如果您只需要一种通信方式,请尝试使用服务器端事件。

【讨论】:

    【解决方案3】:

    除了 Pusher 之外,您还可以在 Heroku 中使用两个选项:

    1) 就像上面提到的 Eric Fode,您可以使用 SSE,因为您不需要双向通信。有一个 Heroku 插件可供您使用:https://addons.heroku.com/eshq

    2) 还有一个鲜为人知的库,名为Faye,您可以查看它。它支持 Node.js 和 Ruby 服务器,它基于 Bayeux Protocol

    【讨论】:

    • faye+1,这看起来很有趣,可能是 heroku 上的一个很好的工具。
    【解决方案4】:

    【讨论】:

      【解决方案5】:

      虽然目前不支持 WebSockets,但 apparently 您可以通过 use Socket.io on Heroku 将其配置为长轮询。

      【讨论】:

      • 该帖子中没有任何内容表明您可以在 heroku 上使用 socket.io。此外,它明确不支持,如果它确实有效,它就是意外行为,并且所有意外行为可能会在不通知的情况下被删除。
      • 是的,我不确定我当时是否粘贴了正确的链接,但至少它解释了如何让 Rails 和 Socket 一起工作。我添加了一个链接,确认 Heroku 在 node.js 堆栈上支持 Socket.io。请注意,您可能需要/想要使用 2 个应用程序。
      • 我认为这个答案与那些乐于回到长轮询的人有关。我对其进行了编辑以澄清我对@RobinGower 意图的假设。
      猜你喜欢
      • 2018-01-14
      • 2018-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-20
      • 1970-01-01
      • 1970-01-01
      • 2013-10-29
      相关资源
      最近更新 更多