【发布时间】:2014-11-05 15:18:51
【问题描述】:
我是 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();
})
})
});
对于失败后如何重新连接套接字有什么建议吗?
【问题讨论】:
-
连接失败后客户端重新连接到服务器的更好方法,您可以使用以下方法: var io = require('socket.io-client')var socket = io.connect('@987654322 @', {reconnect: true});
-
@Shrawan socket.io 和 socket.net 是两个不同的框架。对于 Node.js,您使用 socket.net