在设计客户端/服务器架构时,将多个WEBSOCKET连接复用到同一进程与服务器(即共享一个连接)是否比在客户端中每个线程/会话打开一个WEBSOCKET连接(通常连接到memcached或数据库服务器时所做的方式)更有优势?
我知道每个连接都会带来额外的开销(例如RAM...)。但预计每个客户端最多只有1K-10K。
具体使用案例:假设我有一个远程服务器,在一侧有多个会话,在另一侧有多个客户端,每个客户端都会通过websocket服务器连接到不同的会话。在远程服务器上,有两种实现方法:(1)每个会话创建自己的websocket连接 (2)所有会话将使用相同的websocket连接。
从连接角度来看,我喜欢共享解决方案(一个websocket连接到所有会话),因为websocket服务器受可用连接数限制(节约服务器/扩缩性)。
但从流量/数据速度/性能角度来看,如果会话将通过连接发送大量小数据包,则如果我们使用一个共享连接,我们将无法利用带宽(有效载荷.../收集几个小数据包成一个大数据包或拆分大数据包成小数据包),因为我们可能需要将不同的数据包发送到不同的客户端和不同的会话,此时,我们将无法收集少量数据包(小数据包),因为它们有不同的目标和来源!!除非我们创建"虚拟连接"来管理每个会话数据以最大化速度,但这将造成很多实现复杂性!!
还有其他意见吗?
谢谢, JB。
我知道每个连接都会带来额外的开销(例如RAM...)。但预计每个客户端最多只有1K-10K。
具体使用案例:假设我有一个远程服务器,在一侧有多个会话,在另一侧有多个客户端,每个客户端都会通过websocket服务器连接到不同的会话。在远程服务器上,有两种实现方法:(1)每个会话创建自己的websocket连接 (2)所有会话将使用相同的websocket连接。
从连接角度来看,我喜欢共享解决方案(一个websocket连接到所有会话),因为websocket服务器受可用连接数限制(节约服务器/扩缩性)。
但从流量/数据速度/性能角度来看,如果会话将通过连接发送大量小数据包,则如果我们使用一个共享连接,我们将无法利用带宽(有效载荷.../收集几个小数据包成一个大数据包或拆分大数据包成小数据包),因为我们可能需要将不同的数据包发送到不同的客户端和不同的会话,此时,我们将无法收集少量数据包(小数据包),因为它们有不同的目标和来源!!除非我们创建"虚拟连接"来管理每个会话数据以最大化速度,但这将造成很多实现复杂性!!
还有其他意见吗?
谢谢, JB。