Jos*_*eph 8 memcached websocket
在设计客户端/服务器体系结构时,将多个WEBSOCKET连接从同一进程多路复用到服务器(即共享一个连接)与在客户端中为每个线程/会话打开一个WEBSOCKET连接是否有任何优势(通常在连接到memcached或数据库服务器.)
我知道与每个连接相关的开销(例如RAM ......).但预计每个客户端的最多不到1K-10K.
具体用例:假设我有一台远程服务器,一边有多个会话,另一边我有多个客户端,每个客户端都会通过websocket服务器连接到不同的会话.在远程服务器中,有两种方法可以实现它:(1)每个会话创建自己的websocket连接(2)所有会话将使用相同的websocket连接.
从连接的角度来看,我喜欢共享解决方案(一个websocket连接到所有会话),因为websocket服务器受#of可用连接的限制(保存服务器/扩展).
但从流量/数据速度/性能的角度来看,如果会话将通过连接发送大量小包,那么,如果我们使用一个共享连接,我们将无法利用带宽(有效载荷.... /将少量小包收集到一个或将大包拆分成小包),因为我们可能必须从不同的会话向不同的客户端发送不同的包,在这种情况下,我们将无法收集少量包(小包),因为他们有不同的目的地和来自不同的来源!!,除非我们将创建管理每个会话数据的"虚拟连接"以最大化速度,但这会产生很多实现复杂性!
还有其他意见吗?
谢谢,JB.
我认为你应该考虑使用有限的连接池,就像他们使用数据库连接架构一样.
我会考虑的另一个解决方案是Pub/Sub数据库中间人,例如Redis.这使您可以使用现有解决方案以及更轻松的可扩展性.
据我所知,只有一个连接和使用多个连接都有问题.
例如,一个连接一次只能发送一条消息.一个足够大的消息可以阻止连接...你移动大数据?
许多连接可能导致开销,这可能非常昂贵,并且会引入更多错误机会.考虑以下:
创建新连接非常昂贵,使用带宽,遭受更长的网络延迟并需要本地资源,这正是websockets允许我们避免的.
您将遇到可伸缩性问题.例如,Heroku将websocket连接限制为每服务器600个,或者至少他们在短时间内这样做了(我认为这是合理的)......你将如何将所有服务器连接到一个数据存储?
请记住,每个操作系统都有一个打开文件限制,并且websockets使用IO体系结构(每个都是一个'open-file',因此websockets是一个有限的资源).
关于流量/数据速度/性能,这是服务器架构的问题......但我相信通过使用一个连接(或一小段连接),您实际上会看到轻微的速度提升.重要的是要记住,当您需要发送TCP/IP数据包时,没有任何有效的多任务处理.
此外,通过有限数量的连接(即使只有一个连接),您将能够受益于操作系统的数据包加入功能,该功能允许您通过一个TCP/IP数据包发送大量的websocket帧(除非您不断刷新TCP/IP套接字).实际上,您将通过更多连接浪费更多带宽 - 甚至忽略用于打开每个新连接的带宽.
只要我5美分,我们都会有不同的想法,我敢肯定.
祝好运!
| 归档时间: |
|
| 查看次数: |
3902 次 |
| 最近记录: |