这是我正在开发的一个简单的Web服务器
var server = require("http").createServer(function(req,resp) {
resp.writeHead(200,{"Content-Type":"text/plain"})
resp.write("hi")
resp.end()
server.close()
})
server.listen(80, 'localhost')
// The shortest webserver you ever did see! Thanks to Node.JS :)
除了keep-alive之外,其他功能都很好。当第一个请求进来时,server.close
会被调用。但是这个过程并没有结束。实际上,TCP连接仍然是打开的,这允许另一个请求通过,这是我试图避免的。
如何关闭现有的保持活动连接?
4条答案
按热度按时间omqzjyyz1#
您可以控制连接的空闲超时,以便设置保持活动状态的连接保持打开的时间。例如:
我们可以用netcat测试一下:
现在我们可以展示关闭服务器的工作原理:在所有空闲连接都被丢弃之后,服务器退出:
ej83mcc02#
可以在响应回调中调用
request.connection.destroy()
,这将关闭请求连接。它还将结束您的进程,因为没有什么可做的,最终结果与在此处调用
process.exit()
相同。2ic8powd3#
如果您要关闭服务器作为进程正常关闭的一部分,您只需要执行以下操作:
基本上,服务器使用的套接字只会在它们实际服务于请求时才让进程保持活动状态,而它们只是无所事事(因为Keep-Alive连接),只要没有其他东西使进程保持活动状态,调用
server.close()
就会关闭进程。如果您需要在服务器关闭后执行其他操作,作为正常关闭的一部分,您可以连接到process.on('beforeExit', callback)
来完成正常的关机过程。z9smfwbn4#
如何关闭现有的保持活动连接?
从节点18.2.0开始,您可以使用
closeAllConnections()
和closeIdleConnections()
方法中的任何一种:server.closeAllConnections()
添加于:v18.2.0
关闭连接到此服务器的所有连接。
server.closeIdleConnections()
添加于:v18.2.0
关闭连接到此服务器的所有未发送请求或等待响应的连接。
例如,这对于HTTP服务器的单元测试非常有用: