gpt4 book ai didi

node.js - 重新连接 net.socket nodejs

转载 作者:搜寻专家 更新时间:2023-10-31 22:26:47 25 4
gpt4 key购买 nike

我是 node.js 的新手,想连接到 TCP 套接字。为此,我使用了 net 模块。

我的想法是将连接序列包装到一个函数中,然后在“关闭”事件上尝试重新连接。显然没那么容易。

function conn() {

client.connect(HOST_PORT, HOST_IP, function() {
startSequence();
})
}

client.on('close', function(e) {
log('info','Connection closed! -> ' + e)
client.destroy();
setTimeout(conn(),1000);
});

因此,当远程主机关闭时,我看到我的日志正在通过,但是似乎正在发生的事情是,一旦远程主机上线,所有先前的尝试都开始得到处理——如果这有意义的话。如果您查看 client.connect,有一个名为 startSequence 的函数会发送一些数据,这些数据会从远程服务器端“启动”连接。当服务器离线并且我开始重新连接之前所有失败的尝试似乎都已被缓冲并在服务器在线时一起发送。

我也尝试了这个 Stackoverflow 链接中的代码但无济于事 ( Nodejs - getting client socket to try again after 5 sec time out )

client.connect(HOST_PORT, HOST_IP, function() {
pmsStartSequence();
})


// Add a 'close' event handler for the client socket
client.on('close', function(e) {
log('debug','connection closed -> ' + e)
client.setTimeout(10000, function() {
log('debug', 'trying to reconnect')
client.connect(HOST_PORT, HOST_IP, function() {
pmsStartSequence();
})
})
});

关于我如何在失败后重新连接套接字有什么建议吗?

最佳答案

受其他解决方案的启发,我写了这个,经过测试,有效!它将继续每 5 秒尝试一次,直到建立连接,如果它也失去连接,它会工作。

/* Client connection */
/* --------------------------------------------------------------------------------- */

const client = new net.Socket()
var intervalConnect = false;

function connect() {
client.connect({
port: 1338,
host: '127.0.0.1'
})
}

function launchIntervalConnect() {
if(false != intervalConnect) return
intervalConnect = setInterval(connect, 5000)
}

function clearIntervalConnect() {
if(false == intervalConnect) return
clearInterval(intervalConnect)
intervalConnect = false
}

client.on('connect', () => {
clearIntervalConnect()
logger('connected to server', 'TCP')
client.write('CLIENT connected');
})

client.on('error', (err) => {
logger(err.code, 'TCP ERROR')
launchIntervalConnect()
})
client.on('close', launchIntervalConnect)
client.on('end', launchIntervalConnect)

connect()

关于node.js - 重新连接 net.socket nodejs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25791436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com