如何防止node.js进行未来连接?

我正在执行以下操作:在负载下,达到某个阈值时,禁止未来的连接,等待服务器处理所有现有的连接,重置服务器,并允许将来的连接。 我以为设置http.maxSockets = 0或http.maxConnections = 0会让我不接受连接,但似乎并非如此。

node.js(或express.js)有没有办法阻止未来的连接?

查看Node的_http_agent.js的代码,看起来好像maxSockets的值被设置为0,而是使用默认值。

我会假设您已经说过“或express.js”您已经使用了Express.js中间件。 对于这些解决scheme,仅节点替代scheme非常简单。

解决scheme1

您可以将maxConnections设置为您的连接阈值:

 var app = require('express'); var server = app.listen(80); //Set up server using whichever port you want server.maxConnections = thresholdConnections; 

服务器现在将在达到阈值时自动拒绝连接。 好处是它会自动发生,缺点是你完全可以完全处理所有的请求,然后再听新的。

解决scheme2

另一个解决scheme是closures你的服务器。 你可以这样做,如下所示:

 var app = require('express'); var server = app.listen(3000); //Set up server using whichever port you want 

稍后,一旦检测到您的连接阈值已经达到,您只需调用server.close()

一旦处理完所有的请求并发送了你的回应,你就可以像你最初启动服务器一样再次聆听更多的请求( app.listen(3000) )。