2016-10-09 17 views
0
var socket = new net.Socket(); 
    socket.connect(PORT, HOST, function() { 
     console.log('SCOEKT CONNECTED TO: ' + HOST + ':' + PORT); 
     socket.write('Hello World!'); 

    }); 
socket.on('error', function() {}); // need this line so it wont throw exception 

// Add a 'close' event handler for the client socket 
socket.on('close', function() { 
    console.log('Connection lost. How do I reconnect? setTimeout?') 
}); 

失敗したらどのように再接続しますか?今、接続が成功しなかった場合、すべてが停止した。..nodejs netクライアントソケット再接続

私はクローズイベントでのsetTimeoutを使用してみましたが、ソケットが接続されているときに、「接続」イベントが複数回発射ます。..

+0

おそらく最初のソケットオブジェクトと同じように新しいソケットオブジェクトを作成します。既存のものを再接続することはできません。概念的には意味がありません。 – xaxxon

+0

しかし、私はこのソケットオブジェクトに接続されているすべてのイベントを失う。例えばsocket.on( 'data')、私はすべてを再バインドしなければならない、よりよい方法があれば願った。 – user3599803

答えて

0

あなたは可能性がありイベントバインドを維持しながら次のように再接続します。

function connect() { 
    var socket = new net.Socket(); 
     socket.connect(PORT, HOST, function() { 
      console.log('SCOEKT CONNECTED TO: ' + HOST + ':' + PORT); 
      socket.write('Hello World!'); 
     }); 

    socket.on('error', function() {}); // need this line so it wont throw exception 

    // Add a 'close' event handler for the client socket 
    socket.on('close', function() { 
     connect(); 
    }); 
} 
connect(); 
+0

こうすれば、私のソケット関連のコードを.on( 'data')のようにconnect関数の中に入れたいのですか? – user3599803

+0

'connect'関数の外にある' handleData'という関数を記述し、 'connect'に' socket.on( 'data'、handleData);を入れても問題ありません。 – leroydev

+0

それは十分ですが、socket.reconnectのようなものがあれば私は期待していましたが、 – user3599803

関連する問題