首页 > 解决方案 > 多个 websocket 连接是否共享一个 TCP 连接?

问题描述

问题

假设我打开 websocket 连接/A/B/C从一个客户端到同一服务器,并且客户端在每个 ws 连接上不断发送消息。

如果携带 ws 连接消息的数据包/A超时并最终需要在底层 TCP 层重新传输,这是否有可能影响客户端在 ws 连接上传输的消息,/B并且/C以多个数据包的方式当较早的一个超时时,通过单个 TCP 连接发送将被延迟?

或者是否有可能每个 ws 连接都接收到自己的 TCP 连接,因此一个上的任何拥塞都不会影响另一个上携带消息的数据包?它可以是特定于实现的吗?

概述

通过 HTTP 进行初始握手后,Websockets 通过 TCP/IP 连接发送数据。

我对 TCP 连接的假设:

由于活动的 websocket 连接运行在 TCP 连接之上,当我们在同一个客户端和服务器之间打开多个并行 websocket 连接时,我们可以做出任何假设吗?

如果我有一个 websocket javascript 客户端打开到同一服务器的两个或多个 websocket 连接,那么底层实现是否只使用一个 TCP 连接?

这是否有可能是特定于实现的,或者只是保证对于给定的 websocket 服务器,所有连接都将发生在同一个底层 TCP 连接上?


语境

这里的上下文是浏览器中的网络多人游戏,其中期望的行为是具有多个并行数据流,其中一个流上的任何超时或延迟都不会影响发送到其他流上的数据包。

当然,当多人游戏需要低延迟时,您通常希望使用 UDP 而不是 TCP,但据我所知,目前还没有真正的跨浏览器、良好支持的选项。在可以选择 UDP 套接字的环境中,您可以在 UDP 之上实现具有不同可靠性/顺序保证的自己的数据流。

然而,当涉及到一个数据包不阻塞另一个数据包时,类似于 UDP 的低延迟可以通过保证 TCP 连接只有一个数据包在运行,并使用更多连接来允许并行数据包()来实现。自然会失去一些优化,但如果延迟是优化的主要变量,则可能是可取的。

标签: socketsnetworkingwebsockettcpudp

解决方案


推荐阅读