【发布时间】:2018-12-17 13:30:31
【问题描述】:
我有简单的服务器示例。在我的服务器中,在将响应发送到客户端后,我必须关闭底层的 NET 套接字。我试过了。
var counter = 0;
app.post("/enddev", (req, res) => {
console.log("REQUEST TO ", req.route.path);
setInterval(() => {
console.log(++counter);
}, 1000);
setTimeout(() => {
res.write("upd\r\n");
res.end();
}, 1000);
res.on("finish", () => {
console.log("Res socket: ", res.socket);
});
});
server.on("connection", socket => {
console.log(
"New connection",
"Address: " + socket.address().address,
"Port: " + socket.address().port
);
socket.on("timeout", () => {
console.log("socket timeout");
socket.end();
});
socket.on("error", err => {
console.log("Socket error: ", err);
});
socket.on("close", hadError => {
console.log(
hadError
? "Socket closed due to ERROR during transmission"
: "Socket closed"
);
});
});
当我运行这个程序时,我观察到套接字在请求发出大约 5 秒后关闭。套接字不会在res.end() 时关闭,而是在 5 秒后关闭。
这是程序运行的控制台快照:
我想在res.end()之后立即关闭套接字。
【问题讨论】: