小编Int*_*ace的帖子

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

我使用 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)

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

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

javascript sockets error-handling tcp node.js

6
推荐指数
1
解决办法
221
查看次数

Nodejs 传递流

我想通过 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)

stream pass-through node.js

2
推荐指数
1
解决办法
5837
查看次数