在带有 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 连接是不是正常?