Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Websocket 设计/架构:web套接字一个连接与多个连接_Websocket_Memcached - Fatal编程技术网

Websocket 设计/架构:web套接字一个连接与多个连接

Websocket 设计/架构:web套接字一个连接与多个连接,websocket,memcached,Websocket,Memcached,在设计客户机/服务器体系结构期间,将同一进程中的多个WEBSOCKET连接多路复用到服务器(即共享一个连接)与在客户机中每个线程/会话打开一个WEBSOCKET连接(连接到memcached或数据库服务器时通常会这样做)相比,有什么优势 我知道与每个连接相关的开销(例如RAM…)。但预计每个客户端最多只有不到1K-10K 特定用例: 假设我有一台远程服务器,一端有多个会话,另一端有多个客户端,每个客户端将通过websocket服务器连接到不同的会话。 在远程服务器中,有两种实现方法:(1)每个

在设计客户机/服务器体系结构期间,将同一进程中的多个WEBSOCKET连接多路复用到服务器(即共享一个连接)与在客户机中每个线程/会话打开一个WEBSOCKET连接(连接到memcached或数据库服务器时通常会这样做)相比,有什么优势

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


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

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

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

还有其他意见吗

谢谢,
JB.

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

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

据我所知,拥有单一连接和使用多种连接都有各自的问题

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

许多连接可能会造成开销,这可能非常昂贵,并且会增加出错的机会。考虑以下事项:

  • 创建新连接非常昂贵,需要使用带宽,网络延迟更长,需要本地资源,而这正是WebSocket允许我们避免的

  • 您将遇到可伸缩性问题。例如,Heroku将websocket连接限制为每台服务器600个,或者至少在不久前他们这样做了(我认为这是合理的)。。。如何将所有服务器连接到一个数据存储

  • 请记住,每个操作系统都有一个开放文件限制,WebSocket使用IO架构(每个操作系统都是一个“开放文件”,因此WebSocket是一个有限的资源)

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

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

    只要我的5美分,我相信我们都会有不同的想法


    祝你好运