如何防止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)
)。