【发布时间】:2012-03-29 15:56:30
【问题描述】:
我用 python 编写了一个(不那么)简单的 websocket 服务器,它监听一个端口,执行握手,然后向客户端发送一个包含数字的消息序列(间隔随机间隔)。
我写了一个 javascript 客户端并在 Chrome 和 Safari 下进行了测试。我发现 Chrome 和 Safari 使用不同的 WebSocket 版本。例如,Chrome 使用 Sec-WebSocket-Key(并期望 Sec-WebSocket-Accept),而 Safari 则在标头之后发送 Sec-WebSocket-Key1、Sec-WebSocket-Key2 和一堆 8 个字节。
我在服务器中实现了一个握手功能,它检测所需的握手类型并执行它。这个问题解决了。 websocket 已从 Chrome 或 Safari(OSX、Windows 和 IOS5 版本)正确打开。
但我还有另一个问题。显然,Safari 发送并期待由 0x00 和 0xFF 分隔的消息,而 Chrome 发送并期待带框和屏蔽的数据(使用较新版本的 websocket 规范)。
我想要一个服务器,它可以根据客户的期望进行调整。我的问题是,我怎样才能提前知道数据是否必须以帧或 0x00,0xFF 分隔发送?
我想我可以假设,如果握手协议基于 Key1 和 Key2,则客户端是 Safari,然后使用 0x00 0xFF 来分隔数据,而如果它使用 Sec-WebSocket-Key,则客户端是 Chrome,并且然后使用框架数据。但是我对这个解决方案并不满意,因为它不是通用的。想法?
【问题讨论】:
标签: google-chrome safari version websocket