gpt4 book ai didi

google-chrome - 如何知道客户端使用哪个 websocket 版本?

转载 作者:行者123 更新时间:2023-12-02 00:24:03 25 4
gpt4 key购买 nike

我用 python 写了一个(不太)简单的 websocket 服务器,它监听一个端口,执行握手,然后向客户端发送一系列消息(间隔随机间隔),其中包含数字。

我写了一个 javascript 客户端,在 Chrome 和 Safari 下测试了它。我发现 Chrome 和 Safari 使用不同的 WebSocket 版本。例如,Chrome 使用 Sec-WebSocket-Key(并期望 Sec-WebSocket-Accept),而 Safari 则发送 Sec-WebSocket-Key1、Sec-WebSocket-Key2 和 header 后的一堆 8 个字节。

我在服务器中实现了一个握手功能,它检测所需的握手类型并执行它。这个问题解决了。 Websocket 已从 Chrome 或 Safari(OSX、Windows 和 IOS5 版本)正确打开。

但是我还有一个问题。显然,Safari 发送并期望由 0x00 和 0xFF 分隔的消息,而 Chrome 发送并期望带框架和屏蔽的数据(使用更新版本的 websocket 规范)。

我想要一个单独的服务器,它可以适应客户的期望。我的问题是,如果数据必须以帧形式发送或以 0x00、0xFF 定界发送,我如何提前判断?

我想我可以假设,如果握手协议(protocol)是基于 Key1 和 Key2,客户端是 Safari,然后使用 0x00 0xFF 来分隔数据,而如果它使用 Sec-WebSocket-Key,则客户端是 Chrome,并且然后使用框架数据。但是我对这个解决方案不满意,因为它不通用。想法?

最佳答案

hixie-76 都有已发布的标准Safari(桌面和移动)和 RFC 6455 使用的协议(protocol)变体由 Chrome 和其他人使用。

您可以使用所请求的握手类型来决定客户端使用的协议(protocol)版本、消息读取时存在的框架以及消息写入时应使用的框架。

关于google-chrome - 如何知道客户端使用哪个 websocket 版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9680820/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com