websocket - Websockify 错误 "Client must support ' 二进制'或 'base64' 协议(protocol)”

标签 websocket

我正在尝试使用 websockify 来允许在浏览器中执行的 JavaScript 与我手写的服务器通信。使用最新版本的 Chrome 和 Firefox 时,我从 websockify 收到以下错误消息: 客户端必须支持“二进制”或“base64”协议(protocol)

查看代码后,我确定只要这两个协议(protocol)未能出现在从客户端接收到的 Sec-Websocket-Protocol header 下,websockify 就会传递此消息并关闭套接字。当我查看 Chrome 传输的原始数据时,它甚至不发送此 header 。这是 Chrome 或 websockify 的问题,还是我在 javascript 中打开 websocket 时未能提供一些信息?或者还有其他解释吗?

最佳答案

您需要提供协议(protocol)列表作为对象构造函数的一部分:

var ws = new WebSocket(uri, ['binary', 'base64']);

如果您使用 websockify 附带的 websock.js 库,那么它会为您处理这个问题。但请注意,websock.js 不提供标准的 WebSocket API,而是提供面向流的 API。即使您使用原始 WebSocket 连接到 websockify,请注意,您仍然需要进行消息重建,因为普通 TCP 没有消息的概念,因此从 onmessage 分块的消息本质上是“任意的”。

关于websocket - Websockify 错误 "Client must support ' 二进制'或 'base64' 协议(protocol)”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15962359/

相关文章:

angular - RxJS:WebSocket 重连处理

amazon-web-services - 将 aws WebSocket api 连接到自定义域名

django - 找到默认的 ROUTING 键 - channel 2 中不再需要此键

java - Android MQTT - Paho 不支持 wss ://

java - jetty websockets 发送二进制数据(图片)

haskell - 如何使用 Haskell 在同一端口上运行 Websockets 服务器和普通 HTTP Web 服务器?

javascript - Websocket onerror - 如何阅读错误描述?

python - 如何为 IBM Watson 的语音转文本服务 Web 套接字端点找到必要的访问 Web token ?

spring - 使用 Spring STOMP websockets 向单人发送消息

apache - 如何为Meteor/SockJS和WebSocket设置一个Apache代理?