我希望执行以下操作:在负载下,当达到某个阈值时,禁止将来的连接,等待服务器处理所有现有连接,重置服务器,并允许将来的连接。我认为设置http.maxSockets = 0或http.maxConnections = 0会让我不接受连接,但似乎并非如此。
node.js(或express.js)中是否有办法禁止将来连接?
答案 0 :(得分:1)
查看Node _http_agent.js
的代码,看起来如果maxSockets
的值设置为0,则会使用默认值。
我会假设,因为你说过#34;或express.js"您已经在使用Express.js中间件了。对于这些解决方案,仅限节点的替代方案非常简单。
解决方案1
您可以将maxConnections
设置为连接阈值:
var app = require('express');
var server = app.listen(80); //Set up server using whichever port you want
server.maxConnections = thresholdConnections;
服务器现在会在达到阈值时自动拒绝连接。它的优点是它会自动发生,缺点是你似乎想在完全听取新的请求之前完全处理所有请求。
解决方案2
另一种解决方案是关闭您的服务器。你可以这样做:
var app = require('express');
var server = app.listen(3000); //Set up server using whichever port you want
稍后,当您检测到已达到连接阈值后,只需致电server.close()
。
处理完所有请求并发送回复后,您可以按照最初启动服务器的方式(即app.listen(3000)
)再次开始侦听更多请求。