【发布时间】:2015-01-09 07:33:43
【问题描述】:
由于连接是持久的,我知道在设置新连接时可以防止很多网络拥塞,例如定期轮询数百台服务器。 我有一个简单的问题。它不会在服务器和客户端上都增加负载以使连接保持很长时间吗?获得的收益会丢失吗??
【问题讨论】:
标签: c# websocket network-programming long-polling polling
由于连接是持久的,我知道在设置新连接时可以防止很多网络拥塞,例如定期轮询数百台服务器。 我有一个简单的问题。它不会在服务器和客户端上都增加负载以使连接保持很长时间吗?获得的收益会丢失吗??
【问题讨论】:
标签: c# websocket network-programming long-polling polling
与服务器建立的 TCP(以及 WebSocket)连接,但不发送或接收(处于空闲状态),确实会消耗服务器上的内存,但不会消耗 CPU 周期。
为了在某些网络环境(如移动设备)上保持 TCP 连接有效(并且“响应”)可能需要定期发送/接收少量数据。例如。 WebSocket 为此内置了 ping/pong(非应用数据)消息。这样做会消耗一些 CPU 周期,但不会很多。
【讨论】:
持久连接是一种权衡。
是的,它们需要服务器存储与每个连接相关的状态,它们需要维护(例如保持活动数据包或 websocket ping),并且它们需要监视(以检测状态更改或到达的信息)。因此,您会在每个连接上花费一些内存和 CPU 资源。
但是它们在连接重新初始化时节省了大量时间,而且通常是资源;一旦建立起来,它们就允许双方发送和接收信息,而不是像经典 HTTP 这样的非持久客户端-服务器系统。
所以这实际上取决于您正在构建的系统。如果您的系统有数百万用户需要偶尔连接到服务器,那么保持这些连接打开的好处可能不值得额外的资源。但是,如果您正在为数百人设计类似聊天服务器之类的东西,那么额外的响应能力可能是值得的。
【讨论】: