我使用 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)
如果服务器突然断电(例如电源被拔掉),则无法工作。客户端不会触发错误/结束或关闭,因此我无法正确关闭连接。因此,直到下次尝试向现有流写入内容时才会触发错误。但这对我来说不是一个选择,特别是对于“在线监控”。
有谁知道如何立即识别服务器关闭?
我想通过 net.Socket (TCP) 流传输 fs.Readstream。为此,我使用 .pipe。当 fs.Readstream 完成时,我不想结束 net.Socket 流。这就是我使用的原因
readStream.pipe(socket, {
end: false
})
不幸的是,我没有在另一边得到“接近”、“完成”或“结束”。这可以防止我关闭另一侧的 fs.Writestream 。但是,net.Socket 连接仍然存在,我也需要该连接,因为我希望接收 ID 作为响应。由于我没有得到相反的“关闭”或“完成”,不幸的是我无法结束 fs.Writestream,因此无法发送具有相应 ID 的响应
有没有办法通过 net.socket 手动发送“关闭”或“完成”事件而不关闭它?通过该命令,只有我自己的事件才会做出反应。谁能告诉我我做错了什么?
var socket : net.Socket; //TCP connect
var readStream = fs.createWriteStream('test.txt');
socket.on('connect', () => {
readStream.pipe(socket, {
end: false
})
readStream.on('close', () => {
socket.emit('close');
socket.emit('finish');
})
//waiting for answer
//waiting for answer
//waiting for answer
socket.on('data', (c) => {
console.log('got my answer: ' + c.toString());
})
})
}
Run Code Online (Sandbox Code Playgroud)