在带有 Puma 的 Rails 4 应用程序中使用 Web 套接字

Posted

技术标签:

【中文标题】在带有 Puma 的 Rails 4 应用程序中使用 Web 套接字【英文标题】:Using Web Sockets in a Rails 4 application with Puma 【发布时间】:2017-07-12 19:01:06 【问题描述】:

我在 Rails 4.2.7 应用程序中工作,需要使用 WebSockets。不幸的是,我无法升级到 Rails 5 并为此使用 Action Cable。

该应用程序在生产中使用 Puma,我这么说是因为我发现了一些用于 Web Sockets 的 gem,但它们只能在 Thin 应用程序服务器中工作,但不能与 Puma 应用程序服务器一起使用。

有什么简单的解决办法吗?

具体来说,我需要做的是每次更新我的模型时向我的客户(在这种情况下为浏览器)触发一个事件

class MyModel < ActiveRecord::Base
  after_commit :notify_users, if: :some_condition

  def notify_users
    # Trigger a web socket event to my clients here
  end
end

我试过https://github.com/websocket-rails/websocket-rails,消息是根据日志发送的,但我没有在浏览器上收到它,不幸的是,宝石似乎不再维护了。

是否有可能适用于这种情况的解决方案?谢谢

【问题讨论】:

彪马超级重要吗? iodine 提供类似的功能(多线程、多处理)以及 Native Websockets(比我测试过的任何 Ruby 实现都快得多)、静态文件服务等......我有偏见,因为我是作者,但我认为它更适合 websockets(我认为它也更快,但您可以自己测试)。 【参考方案1】:

基于这个issue,听起来最好的选择是tubesock

【讨论】:

以上是关于在带有 Puma 的 Rails 4 应用程序中使用 Web 套接字的主要内容,如果未能解决你的问题,请参考以下文章

运行 Puma 和 Nginx 的带有 AWS Elastic Beanstalk 的 Rails 应用程序 502

带有 Rails(Puma)的 Websockets - WebSocket 握手期间出错:意外的响应代码:200

如何在 Elastic Beanstalk 上的 Rails 4 Puma 应用程序中设置 RDS_DB_NAME

Rails 应用程序保持这么多空闲的 Puma 和 Postgres 连接是不是正常?

ini 使用puma [ssl和non-ssl版本]为rails 4应用程序配置Nginx

在 puma、rails、nginx 上设置 rails 应用程序一切都在运行,但 nginx 发送错误