我对TCP客户端有一个奇怪的问题 - 我使用socket.connect()
连接到服务器实例。但是,由于服务器没有运行,我收到错误ECONNREFUSED
(到目前为止一直很好)。
我使用on('error')
处理它并设置超时以尝试在10秒内重新连接。只要服务器关闭,这应该继续失败。情况就是这样。
但是,一旦服务器运行,看起来所有以前的套接字仍然处于活动状态,所以现在我有几个客户端套接字连接到服务器。
我尝试在destroy
处理程序函数的开头调用on('error')
。
任何想法如何处理?
谢谢!
编辑:代码段
var mySocket;
var self = this;
...
var onError = function (error) {
mySocket.destroy(); // this does not change anything...
console.log(error);
// Wait 10 seconds and try to reconnect
setTimeout(function () {
console.log("reconnecting...");
self.once('InitDone', function () {
// do something
console.log("init is done")
});
self.init();
}, 10000);
}
内部 init 功能:
...
console.log("trying to connect");
mySocket = tls.connect(options, function () {
console.log("connected!");
self.emit('InitDone');
});
mySocket.setEncoding('utf8');
mySocket.on('error', onError);
...
结果如下:
trying to connect
ECONNREFUSED
reconnecting...
trying to connect
ECONNREFUSED
reconnecting...
trying to connect
ECONNREFUSED
reconnecting...
--> Starting the server here
trying to connect
connected
init is done
connected
init is done
connected
init is done
connected
init is done
但是,由于之前的套接字连接失败,我只希望有一个连接。希望这澄清了这个问题。 谢谢!