2017-03-09 19 views
0

Node.jsに基づくTCPサーバーがあります。新しいソケットが接続されている場合、私はクライアントオブジェクトでラップ:Node.jsソケットが相手方によって終了しました

net.createServer(function(socket){ 
     socket.setEncoding("utf8"); 
     socket.name = socket.remoteAddress + ':' + socket.remotePort; 
     var client = cm.create(socket); 
    }).listen(this.settings.port); 

クライアントが切断は、どのように私はソケットへの書き込みから自分自身を防ぐことができますか?私は、「クローズ」、「エラー」、「終了」などのイベントがあることを知っていますが、これらがどのように役立つのかわかりません。

これらのイベントは、閉じたソケットにデータを書き込もうとすると発生します。その時によって、エラーがスローされます....

+0

接続が切断されたことを認識した後に自分自身をソケットに書き込まなくても、ストリームが存在する場合はエラーが発生する可能性があります。書き込み前にデータをバッファリングしたり、クローズとライトの両方が同じに起こったりする場合 –

答えて

1

を処理しているようだが、エラーイベント自体は、ハンドルされていないエラー例外を防止します。誰が考えただろうか?

client.socket.on('error', function(){ 
     console.log("CLIENT HAS ERRORED") 
    }); 

これにより、ノードアプリケーションが死ぬことを防ぎます。

0

しかし、あなたは、この擬似コードのようなもの行うことができます:

var active = true; 

var connection = createConnection(); 
connection.onExit(function() { active = false; }); 

while (active){ 
    connection.talk(); 
} 

をだからあなたの通信スレッドはソケット起こるコールバックでアクセス可能な変数を共有しますシャットダウンします。そうすれば、彼らはコミュニケーションがとれる。

関連する問題