在Node.js中阻止事件循环仍然存在问题吗?

时间:2019-12-26 18:42:05

标签: node.js nginx

我想了很久。

您拥有NGINX负载均衡器,该负载均衡器将Web请求分配给特定的node.js实例(您可以有很多)。如果其中一个阻止时间很长,则有分配给它的Web请求,它们正在内部等待运行,并且被卡住了。使用循环负载均衡器会发生这种情况。但是您可以为NGINX选择“最少连接”选项,这意味着NGINX会将传入的Web请求分配给其中连接数最少的node.js实例,因此Web请求将不会转到node.js实例,如果有更多的人在里面等着,它将转到一个, 由于它们在内部等待的次数较少,因此处理速度很快,并且具有这种功能。

因此,无需担心在代码中阻塞事件循环。

我对吗?

1 个答案:

答案 0 :(得分:0)

  

但是您可以为NGINX选择“最少连接”选项

假定进程A有一个客户端,而进程B有100个客户端。

进程A可以做一些事情来阻止它接受新的连接。无论如何,Nginx会将流量路由到它。在这种情况下,Nginx所知道的是它与进程B有100条开放连接,这比进程A多。

在这种情况下,least-connections平衡选项没有实际用途。

  

因此,无需担心在代码中阻塞事件循环。

您始终应该至少对此有所注意。您的代码中可能包含需要定期运行的内容。如果您阻止,它们将无法运行。

通常,如果您实际上正在阻塞,则应用程序中可能存在一些损坏或设计不佳的问题。 (当然,出于某些特定原因,如果您打算这样做,则阻塞没有问题。这些原因很少见。)