ruby 如何使用Rails/websocket-rails调试“Invalid frame header”WebSocket问题(独立)

iklwldmw  于 8个月前  发布在  Ruby
关注(0)|答案(3)|浏览(84)

我开始使用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服务器日志中,我可以看到一个连接已经启动,然后下降,但没有其他日志,甚至tho日志级别是“调试”.没有其他错误,我可以看到和粗略的谷歌搜索没有带来任何关于“无效帧头”,所以我几乎卡住了。
任何帮助将不胜感激!

**编辑:**我最终使用NodeJS+Faye来让事情移动,它一直工作得很好,我很高兴在系统中引入这个新的移动部分。我相信这个问题只是基于我的特定设置的 * 临时 * 问题,但有时候,你只需要把事情做好。

fv2wmkja

fv2wmkja1#

您正在寻找以下资源:
问题主题:debugging websocket in google chrome
Chrome开发者工具现在能够列出WebSocket帧,如果帧不是二进制的,还可以检查数据。
工艺流程:
1.启动Chrome开发人员工具
1.加载页面并启动WebSocket连接
1.单击网络选项卡。
1.从左侧列表中选择WebSocket连接(它的状态为“101交换协议”)。
1.点击帧子标签。二进制帧将显示长度和时间戳,并指示它们是否被屏蔽。文本帧也将显示有效负载内容。

2ul0zpep

2ul0zpep2#

我想通过电线传送的数据格式有问题。
请仔细查看消息的格式。是否已正确进行字符串化?方括号和圆括号、{}、[]和()是否都匹配?IDE是否在某处插入了额外的内容?请尝试使用linter或联机验证程序验证消息。
检查发送方和接收方的消息。确保一切都是正确的。

ercv8c1e

ercv8c1e3#

这可能不是作者最初问题的答案,但我想为这个无效帧头错误添加一个可能的解决方案。当服务器发送空响应时,在WebSocket协议上可能会生成无效的帧头(长度为0的消息)TCP中的. 0长度表示连接已关闭,因此空消息后的任何数据传输都将失败。This是帮助我找到这个解决方案。我希望将来有人会发现这个有用,并保存一些时间。

相关问题