gpt4 book ai didi

websocket - 设计/架构 : web-socket one connection vs multiple connections

转载 作者:行者123 更新时间:2023-12-03 15:07:18 24 4
gpt4 key购买 nike

在设计客户端/服务器架构期间,从同一进程多路复用多个 WEBSOCKET 连接到服务器(即共享一个连接)与在客户端中的每个线程/ session 打开一个 WEBSOCKET 连接(通常在连接到 memcached 或数据库服务器。)

我知道与每个连接相关的开销(例如 RAM ...)。但预计每个客户端最多不到1K-10K。

具体用例:
假设,我有一个远程服务器,一侧有多个 session ,另一侧有多个客户端,每个客户端将通过 websocket 服务器连接到不同的 session 。
在远程服务器中,有两种实现方式:(1) 每个 session 创建自己的 websocket 连接 (2) 所有 session 都将使用相同的 websocket 连接。

从连接的角度来看,我喜欢共享解决方案(一个 websocket 连接到所有 session ),因为 websocket 服务器受到可用连接数的限制(保存服务器/缩放)。

但是从流量/数据速度/性能的角度来看,如果一个 session 会通过连接发送很多小包,那么,如果我们使用一个共享连接,我们将无法利用带宽(有效负载..../把几个小包收成一个或把大包拆成小包),因为我们可能要从不同的 session 向不同的客户发送不同的包,在这种情况下,我们将无法收几个包(小包),因为他们有不同的目的地和不同的来源!!,除非我们创建“虚拟连接”来管理每个 session 数据以最大限度地提高速度,但这会产生很大的实现复杂性!!!

还有其他意见吗?

谢谢,
JB。

最佳答案

我认为您应该考虑使用有限的连接池,就像他们使用数据库连接架构一样。

我会考虑的另一个解决方案是 Pub/Sub 数据库中间人,例如 Redis。这允许您使用现有的解决方案以及更容易的可扩展性。

据我所知,拥有单个连接和使用多个连接都有其问题。

例如,一个连接一次只能发送一条消息。一个足够大的消息可能会阻止连接......你在移动大数据吗?

许多连接会导致开销非常昂贵,并且会增加出错的机会。请考虑以下事项:

  • 创建新连接非常昂贵,使用带宽,遭受更长的网络延迟并需要本地资源,而这正是 websockets 允许我们避免的。
  • 您将遇到可扩展性问题。例如,Heroku 将 websocket 连接限制为每台服务器 600 个,或者至少他们在不久之前这样做了(我认为这是合理的)......你将如何将所有服务器连接到一个数据存储?
  • 请记住,每个操作系统都有一个打开文件限制,并且 websockets 使用 IO 架构(每个操作系统都是一个“打开文件”,因此 websockets 是一种有限的资源)。

  • 关于流量/数据速度/性能,这是服务器架构的问题……但我相信您实际上会通过使用一个连接(或一小部分连接)看到速度略有提高。重要的是要记住,当您需要发送 TCP/IP 数据包时,没有任何有效的多任务处理。

    此外,通过有限数量的连接(即使只有一个连接),您将能够受益于操作系统的数据包加入功能,该功能将允许您通过一个 TCP/IP 数据包发送多个 websocket 帧(除非您不断刷新TCP/IP 套接字)。您实际上会因更多连接而浪费更多带宽 - 甚至不考虑用于打开每个新连接的带宽。

    只是我的 5 美分,我们都会有不同的想法,我敢肯定。

    祝你好运!

    关于websocket - 设计/架构 : web-socket one connection vs multiple connections,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31134420/

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