我正在创建一个可重新加载的端点的Express服务器。
为了实现这个目的,我创建了一个专门用于此目的的端点。
但是,当我在Express的HTTP服务器上调用
下面是我的脚本的简化版本(尚未完全工作,但您可以理解其中的要点):
当我调用端点时,服务器将输出“关闭服务器”,但是“关闭服务器”需要很长时间才能被调用(5分钟)。当我重新加载页面时,它仍然可以工作,而
我使用的是Node.js版本6.0.0和Express版本4.14.0。
一些更新:
我通过在发送响应后调用
更干净的解决方法是保持当前连接的记录,并在重新加载函数中关闭这些连接,而不是立即关闭它们。如果您的负载较高,这可能会更轻便。
为了实现这个目的,我创建了一个专门用于此目的的端点。
但是,当我在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();
当我调用端点时,服务器将输出“关闭服务器”,但是“关闭服务器”需要很长时间才能被调用(5分钟)。当我重新加载页面时,它仍然可以工作,而
server.listening
等于false
。我使用的是Node.js版本6.0.0和Express版本4.14.0。
一些更新:
我通过在发送响应后调用
req.destroy()
来解决问题,这会有任何副作用吗?更干净的解决方法是保持当前连接的记录,并在重新加载函数中关闭这些连接,而不是立即关闭它们。如果您的负载较高,这可能会更轻便。
Connection: keep-alive
。这是HTTP/1.1的一个功能,用于减少每个HTTP请求的连接创建和撤销的开销。 - mscdex