WebSockets在桌面浏览器中运行,但在Chrome for Android中失败

时间:2014-03-30 23:08:25

标签: google-chrome websocket libwebsockets

我有一个通过WebSockets连接到服务的Web应用程序。此应用在适用于桌面的Chrome / Firefox中运行良好,但Chrome移动版提供错误:

  

与'ws://192.168.0.11:8080 /'的WebSocket连接失败:一个或多个保留位开启:reserved1 = 0,reserved2 = 1,reserved3 = 0

服务器使用最新版本的libwebsockets

在初始连接期间会发生此错误,因此会在多个2048字节帧上向客户端发送一大堆JSON数据。

服务器公开了几个不同的WebSockets。其中一些也以其他方式失败:

  

无法将文本框架解码为UTF-8。

...和...

  

无法识别的帧操作码:6

预测哪些应该失败以及哪些应该成功的模式还没有显露出来。

我怀疑这里有某种框架问题。我已经回顾了WireShark中的消息,它们看起来对我来说是正确的。标题似乎是正确的。

为什么这会在桌面Chrome / Firefox中运行但在Chrome for Android中失败?

1 个答案:

答案 0 :(得分:3)

WireShark packet capture显示有一些帧溢出两个TCP数据包。错误消息的变化表明随机有效负载被解释为标头。我修改了我的服务器,使最大数据包大小为1024字节而不是2048字节,从而抑制了这个错误。

我不知道这是否是Chrome for Android中的错误,或者桌面版是否容忍某些违反其移动表兄会不会违反的规范。我怀疑前者。

编辑在我的平板电脑上,我还可以通过进入chrome://flags并启用实验性WebSocket支持来解决问题。