如何在出现 ECONNRESET 错误后正确重新连接到套接字(Node.js net.Socket)

3

我正在使用Nodejs的原生net模块来建立与硬件设备通过局域网的Socket连接。 我已经实现了一些事件处理程序,例如,我正在监听data事件,一切都按预期运行!

const net = require('net');
let reader = new net.Socket();

reader.connect(READER_PORT, READER_IP);

// Some event handlers, working perfectly fine...
reader.on('data', (data) => {
    // Process the data           
});

reader.on('close', (error) => {
   // Reconnect here
});

然而,如果我在5-10分钟内不使用该连接(即处于空闲状态),它会自动关闭,并发出以下错误的close事件:

read ECONNRESET
    at TCP.onStreamRead (internal/stream_base_commons.js:208:20) {
  errno: 'ECONNRESET',
  code: 'ECONNRESET',
  syscall: 'read'
}

当我收到 closeerror 事件时,我希望重新建立连接。

我尝试使用与我在捕获这些事件时最初使用的相同的 reader.connect() 方法。但是,在这之后,我没有从套接字接收任何数据,也就是说,永远不会调用 data 处理程序。

在这种情况下重新连接到套接字的正确方法是什么?


1
如果空闲一段时间后套接字关闭,请尝试使用以下链接:https://nodejs.org/api/net.html#net_socket_setkeepalive_enable_initialdelay - Lawrence Cherone
@LawrenceCherone 谢谢您,先生,这解决了我的问题!请考虑将此添加为答案。再次感谢! - Azamat Abdullaev
1个回答

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接