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)
如果服务器突然断电(例如电源被拔掉),则无法工作。客户端不会触发错误/结束或关闭,因此我无法正确关闭连接。因此,直到下次尝试向现有流写入内容时才会触发错误。但这对我来说不是一个选择,特别是对于“在线监控”。
有谁知道如何立即识别服务器关闭?
您需要启用 TCP 保持活动,以便客户端检测到服务器不再响应,并且您可以调整它检查空闲连接的频率。(我在这个答案的开头写了一个语言通用描述。)
在节点中,您似乎可以执行以下操作:socket.setKeepAlive(true)
,即让该客户端在套接字空闲时检测服务器已消失:
//Client
const tcpConnect = net.createConnection(SERVERINFO);
tcpConnect.setKeepAlive(true);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
221 次 |
最近记录: |