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

Node.js tcp socket shut off trigger

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

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

//Client
const tcpConnect = net.createConnection(SERVERINFO);

因此我可以轻松注册多个客户端,open/close 流。一切正常。

但现在我注意到回调。

tcpConnect.on('end', () => { console.log('end triggered') });
tcpConnect.on('close', () => { console.log('close triggered') });
tcpConnect.on('error', () => { console.log('error triggered') });

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

有谁知道立即识别服务器关闭的方法吗?

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

在节点中,您似乎可以这样做:socket.setKeepAlive(true),即当套接字空闲时,此客户端检测服务器已消失:

//Client
const tcpConnect = net.createConnection(SERVERINFO);
tcpConnect.setKeepAlive(true);