6

我正在尝试使用 websockify 允许在浏览器中执行的 javascript 与我的手写服务器对话。使用最新版本的 Chrome 和 Firefox 时,我从 websockify 收到以下错误消息:Client must support 'binary' or 'base64' protocol

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

4

1 回答 1

9

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

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

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

于 2013-04-12T15:35:07.023 回答