我有一个简单的服务器示例。在我的服务器中,响应发送到客户端后,我必须关闭基础的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()
之后立即关闭套接字。
答案 0 :(得分:0)
更好的方法是检查套接字连接是否已经存在。如果没有,那么您应该创建一个连接:
客户:
if (!this.socket) {
this.socket= io("URL", { secure: true });
}
服务器:
socket.on('disconnect', () => {
const userId = socket.userId;
userOperation.logout(dbConnection, userId);
});