我试图了解 websocket 多路复用扩展的目的,文档所述的主要目的是使用与服务器的单个同源物理 websocket 连接,而每个浏览器选项卡都使用在物理连接之上多路复用的逻辑连接。我看到今天我们可以使用另一种替代方法来完成此行为,方法是启动一个共享的 Web Worker,它打开 websocket 连接并让每个浏览器选项卡向/从该 Worker 发送和接收消息。我还没有尝试过,我想知道这是否可行。
问问题
2570 次
1 回答
14
您的问题反映了对 WebSocket Multiplexing Extension 试图解决的问题的误解。
基本WebSocket规范 (RFC 6455) 定义了一种通过 TCP/IP 进行双向数据交换的协议。WebSocket 以正常的 HTTP 请求/响应开始。在此交换中,客户端和服务器协商切换到 WebSocket 协议。切换后,客户端和服务器通过 TCP/IP 连接交换数据帧。这会在客户端和服务器之间创建一个双向数据流。
基本协议的一个缺点是它仅支持在每个方向上流动的单个数据流。多路复用扩展通过允许客户端和服务器在同一 TCP/IP 连接上创建多个“通道”来增强基本协议。
所以多路复用扩展的目的是允许多个 WebSocket 通道在同一个 TCP/IP 连接上运行。就这样。
让多个浏览器选项卡(或 Web 工作者)共享一个 TCP/IP 连接只是如何使用多路复用 websocket的一个示例。在标准术语中,它只是“信息性”(描述性),而不是“规范性”(规范的必需部分)。
于 2013-09-04T20:58:40.333 回答