【发布时间】:2015-01-08 22:46:57
【问题描述】:
我开始使用 websocket-rails,尝试将旧的通知轮询系统(在 Ruby 2.1/Rails 4.0 上)转换为更现代的 WS 系统。我在独立模式下使用 WebsocketRails,这是我的配置,基本上是默认的:
WebsocketRails.setup do |config|
config.standalone = true
end
我还设置了一个在默认端口上运行的新 Redis - 这里似乎没有通信问题。
在客户端,我添加了 websocket-rails 的 JS,并在尝试打开连接并订阅频道时,使用:
@dispatcher = new WebSocketRails "localhost:3001/websocket"
@channel = @dispatcher.subscribe "notifications"
我在 Chrome 控制台中看到一个错误:
WebSocket connection to 'ws://localhost:3001/websocket' failed: Invalid frame header
在 Firefox 中,错误有所不同,但仍然是错误:
The connection to ws://localhost:3001/websocket was interrupted while the page was loading.
从 websocket 服务器日志中,我可以看到连接已启动然后断开,但没有其他日志,即使日志级别是“调试”......我看不到其他错误并且粗略的谷歌搜索没有显示任何关于“无效帧头”的信息,所以我几乎被卡住了。
任何帮助将不胜感激!
编辑:我最终使用 NodeJS+Faye 来让事情动起来,而且它运行得非常好,我很高兴在系统中引入这个新的运动部件。根据我的具体设置,我确定问题只是临时,但有时,您只需要完成工作即可。
【问题讨论】:
-
您使用的是什么网络服务器?我在 Thin 上使用 faye-websocket,我的情况完全相同。
-
它在 Thin 上运行。从那以后我在安全更新后升级到 Rails 4.1 和 Ruby 2.1.5 并且没有机会再试一次,我希望圣诞节能出现奇迹。我环顾四周,找不到太多关于这个问题的信息,所以我认为这只是一个人工制品,因为元素组合非常不可能。
-
如果您没有使用任何特殊的 Rails 功能,您可能会发现the Plezi framework 更易于使用。如果您正在使用 ActiveRecord 和 ActiveSupport,它也应该可以与它们一起使用,并且它具有简单的 Redis 集成。
标签: ruby-on-rails ruby websocket