gpt4 book ai didi

node.js - Express 服务器不关闭

转载 作者:搜寻专家 更新时间:2023-10-31 22:41:52 24 4
gpt4 key购买 nike

我正在创建一个具有可重新加载端点的 Express 服务器。
为此,我创建了一个端点。

但是当我在 Express 的 HTTP 服务器上调用 server.close() 时,它仍然会继续监听,而 server.listening 另有说明时,它仍然是。

这是我的脚本的简化版本(不能完全工作,但你明白了要点):

class simpleServer {
constructor() {
let express = require('express');
this.app = express();
this.app.get('/reload', this.reload);
this.server = this.app.listen(3000);
}

reload(req, res) {
console.log('Closing server');

this.server.close(function() {
console.log('Closed server');
});

// Re-init & stuff

res.json({
message: 'Reloaded'
});
}
}

let server = new simpleServer();

当我调用端点时,服务器会输出'Closing server',但是'Closed server'需要很长时间才能被调用(5分钟)。当我重新加载页面时,它仍然有效,而 server.listening 等于 false

我正在使用 Node.js 版本 6.0.0 和 Express 版本 4.14.0


一些更新:

我在发送响应后通过调用 req.destroy() 解决了这个问题,这有什么副作用吗?

更简洁的修复方法是记录当前连接并在重新加载函数中关闭它们,而不是立即关闭它们。如果您有更高的负载,这可能会不那么重。

最佳答案

当您调用 .close() 时,它只会停止接受 连接,不会终止现有连接。

实际关闭可能需要一些时间的原因是,如果存在已设置 Connection: keep-alive 的现有连接,以防有更多请求。

关于node.js - Express 服务器不关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38913461/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com