Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.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/3/sockets/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
Node.js 使用Socket.io而不是普通的ajax调用是否可以防止服务器耗尽TCP套接字?_Node.js_Sockets_Concurrency_Nginx_Socket.io - Fatal编程技术网

Node.js 使用Socket.io而不是普通的ajax调用是否可以防止服务器耗尽TCP套接字?

Node.js 使用Socket.io而不是普通的ajax调用是否可以防止服务器耗尽TCP套接字?,node.js,sockets,concurrency,nginx,socket.io,Node.js,Sockets,Concurrency,Nginx,Socket.io,我正在尝试建立一个服务器,可以处理大量持续的并发请求。我发现,在某一点上,服务器将无法足够快地回收“旧”TCP连接,以适应极端数量的请求 WebSocket是否消除或减少了服务器需要处理的tcp连接数量?它们是否是“正常”请求的良好替代方案?WebSocket是持久连接,因此这取决于您所谈论的内容。io使用XHR的方式不同于典型的ajax调用,因为它在发送响应之前尽可能长时间地挂起请求。这是一种称为长轮询的技术,它试图通过永不放弃请求来模拟持久连接。当请求即将超时时,它会发送一个响应,并立即启动

我正在尝试建立一个服务器,可以处理大量持续的并发请求。我发现,在某一点上,服务器将无法足够快地回收“旧”TCP连接,以适应极端数量的请求


WebSocket是否消除或减少了服务器需要处理的tcp连接数量?它们是否是“正常”请求的良好替代方案?

WebSocket是持久连接,因此这取决于您所谈论的内容。io使用XHR的方式不同于典型的ajax调用,因为它在发送响应之前尽可能长时间地挂起请求。这是一种称为长轮询的技术,它试图通过永不放弃请求来模拟持久连接。当请求即将超时时,它会发送一个响应,并立即启动一个新的请求,该请求将再次挂起,循环将继续

因此,我猜如果由于ajax调用而导致连接泛滥,那么这可能是因为您的客户机代码在某个时间间隔轮询服务器。这意味着即使是空闲的客户端也会因为这种轮询而愤怒地攻击您的服务器。如果是这种情况,那么是的,socket.io将减少您的连接数,因为它会尽可能长时间地为每个客户端挂起一个连接


现在我推荐socket.io而不是简单的ajax请求。io的设计目的是使其在任何传输上都能正常运行。它根据可能的连接而优雅地降级的方式非常好,这意味着您的服务器将尽可能少地过载,同时仍能覆盖尽可能多的受众。

WebSocket是持久连接,因此它实际上取决于您所谈论的内容。io使用XHR的方式不同于典型的ajax调用,因为它在发送响应之前尽可能长时间地挂起请求。这是一种称为长轮询的技术,它试图通过永不放弃请求来模拟持久连接。当请求即将超时时,它会发送一个响应,并立即启动一个新的请求,该请求将再次挂起,循环将继续

因此,我猜如果由于ajax调用而导致连接泛滥,那么这可能是因为您的客户机代码在某个时间间隔轮询服务器。这意味着即使是空闲的客户端也会因为这种轮询而愤怒地攻击您的服务器。如果是这种情况,那么是的,socket.io将减少您的连接数,因为它会尽可能长时间地为每个客户端挂起一个连接


现在我推荐socket.io而不是简单的ajax请求。io的设计目的是使其在任何传输上都能正常运行。它根据可能的连接而优雅地降级的方式非常好,这意味着您的服务器将尽可能少地过载,同时仍能接触到尽可能多的受众。

听起来您当前的Web服务器可能有一个长时间的“保持活动”设置。修改它可能会解决您的问题。听起来您的当前Web服务器可能有一个很长的“保持活动”设置。修改它可以解决您的问题。