Node.js connectListener仍然在套接字错误上调用

时间:2014-08-21 00:51:03

标签: node.js sockets tcp

我对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

但是,由于之前的套接字连接失败,我只希望有一个连接。希望这澄清了这个问题。 谢谢!

0 个答案:

没有答案