重新连接到NodeJS上的TCP / IP套接字

时间:2014-10-15 07:22:23

标签: node.js sockets

我使用“net”库在我的nodeJs上创建TCP连接。

root.socket = net.createConnection(root.config.port, root.config.server);

我正在尝试在远程服务器关闭时处理错误并在Cycle中重新连接。

root.socket.on('error', function(error) {
        console.log('socket error ' + error);

        root.reconnectId = setInterval(function () {
            root.socket.destroy();
            try {
                console.log('trying to reconnect');
                root.socket = net.createConnection(root.config.port, root.config.server);
            } catch (err) {
                console.log('ERROR trying to reconnect', err);
            }

        }, 200); 
}

问题是,在远程服务器关闭的情况下,我仍然遇到错误,我的nodeJS服务器停止了。

  

events.js:72           扔掉//未处理的'错误'事件                 ^错误:连接ECONNREFUSED       在errnoException(net.js:904:11)       在Object.afterConnect [as oncomplete](net.js:895:19)

1 个答案:

答案 0 :(得分:2)

你需要这样的东西:

var net = require('net');

var c = createConnection(/* port, server */);

function createConnection(port, server) {
    c = net.createConnection(port, server);

    console.log('new connection');

    c.on('error', function (error) {

        console.log('error, trying again');

        c = createConnection(port, server);
    });

    return c;
}

在你的情况下,你正在创建一个新的连接,但你没有附加任何错误监听器,错误会在执行循环中的其他地方引发,并且不会被" try / catch&#34捕获;言。

P.S。尽量避免使用"尝试/捕捉"语句,Node.JS中的错误处理是使用错误侦听器和域进行的,它仅对JSON.parse()或同步执行的其他函数有用。