我正在尝试设置一个可以处理大量持续同时请求的服务器。我发现在某个时刻,服务器将无法足够快地回收“旧” TCP 连接以适应大量请求。
websockets 是否消除或减少了服务器需要处理的 tcp 连接数量,它们是“正常”请求的良好替代方案吗?
我正在尝试设置一个可以处理大量持续同时请求的服务器。我发现在某个时刻,服务器将无法足够快地回收“旧” TCP 连接以适应大量请求。
websockets 是否消除或减少了服务器需要处理的 tcp 连接数量,它们是“正常”请求的良好替代方案吗?
Websockets 是持久连接,所以它真的取决于你在说什么。socket.io 使用 XHR 的方式与典型的 ajax 调用不同,它在发送响应之前尽可能长时间地挂在请求上。这是一种称为长轮询的技术,它试图通过永不放弃请求来模拟持久连接。当请求即将超时时,它会发送一个响应并立即启动一个新请求,它会再次挂起,然后循环继续。
所以我猜如果你因为ajax调用而被连接淹没,那可能是因为你的客户端代码以某种间隔轮询服务器。这意味着即使是空闲的客户端也会因为这个轮询而愤怒地攻击你的服务器。如果是这种情况,那么是的,socket.io 将减少您的连接数,因为它会尝试尽可能长时间地挂起每个客户端的单个连接。
这些天来,我推荐 socket.io 而不是做普通的 ajax 请求。Socket.io 被设计为在任何传输上都能表现出色。它基于可能的连接而优雅地降级的方式很棒,这意味着您的服务器将尽可能少地过载,同时仍能覆盖尽可能多的受众。