Node.js tcp套接字关闭触发器

Int*_*ace 6 javascript sockets error-handling tcp node.js

我使用 node.js 和 NET 类来连接多个 Rasperry Pi。

//Server
const net = require('node:net');
const server = net.createServer();

//Client
const tcpConnect = net.createConnection(SERVERINFO);
Run Code Online (Sandbox Code Playgroud)

因此我可以轻松注册多个客户端、打开/关闭流。一切正常,没有任何问题。

但现在我注意到回调。

tcpConnect.on('end', () => { console.log('end triggered') });
tcpConnect.on('close', () => { console.log('close triggered') });
tcpConnect.on('error', () => { console.log('error triggered') });
Run Code Online (Sandbox Code Playgroud)

如果服务器突然断电(例如电源被拔掉),则无法工作。客户端不会触发错误/结束或关闭,因此我无法正确关闭连接。因此,直到下次尝试向现有流写入内容时才会触发错误。但这对我来说不是一个选择,特别是对于“在线监控”。

有谁知道如何立即识别服务器关闭?

los*_*der 2

您需要启用 TCP 保持活动,以便客户端检测到服务器不再响应,并且您可以调整它检查空闲连接的频率。(我在这个答案的开头写了一个语言通用描述。)

在节点中,您似乎可以执行以下操作:socket.setKeepAlive(true),即让该客户端在套接字空闲时检测服务器已消失:

//Client
const tcpConnect = net.createConnection(SERVERINFO);
tcpConnect.setKeepAlive(true);
Run Code Online (Sandbox Code Playgroud)