2017-04-03 14 views
0

スクリプト全体がtry catchブロックでラップされていても、プロセスを閉じるサーバー上で2つの例外が発生し続けます。 例外は以下のとおりです。node.jsのソケット例外

events.js:160 
throw er; // Unhandled 'error' event 
    ^

Error: write EPIPE 
    at exports._errnoException (util.js:1022:11) 
    at WriteWrap.afterWrite [as oncomplete] (net.js:804:14) 

とソケットのlibから

Error: invalid opcode: 7 
    at Receiver.start (/home/mysite/public_html/node_modules/ws/lib/Receiver.js:211:18) 
    at Receiver.add (/home/mysite/public_html/node_modules/ws/lib/Receiver.js:134:14) 
    at Socket._ultron.on (/home/mysite/public_html/node_modules/ws/lib/WebSocket.js:139:22) 
    at emitOne (events.js:96:13) 
    at Socket.emit (events.js:188:7) 
    at readableAddChunk (_stream_readable.js:176:18) 
    at Socket.Readable.push (_stream_readable.js:134:10) 
    at TCP.onread (net.js:551:20) 

これを引き起こしていることとその防止方法を知っている人はいますか?

編集:

抜粋:

try 
{ 
    wss.broadcast = function broadcast(data) { 
     wss.clients.forEach(function (client) { 
     if (client.readyState == WebSocket.OPEN) { 
      client.send(data); 
     } 
     }); 
    }; 


    wss.on("connection", function (ws) 
    { 
     if(blacklist.indexOf(GetClientIP(ws)) != -1) 
     { 
      console.log("Kicking banned"); 
      ws.close(); 
      return; 
     } 

     clientCount++; 

     wss.broadcast(welcomeMessage); 


     ws.on("message", function (message) 
     { 
      ProcessMessage(message); 
     }); 

     ws.on("close", function() 
     { 
      clientCount--; 

      wss.broadcast(goodbyeMessage); 
     }); 
    }); 
} 
catch(exxx) 
{ 
    console.log("Caught a exception); 

    console.log(exxx); 
} 
+0

コードを表示できますか? –

+1

@AymanElTemsahiコード全体が非常に大きいですが、これは接続コードの要点です。例外はtry catch節にはまったくキャッチされません。 – John

+0

'wss'はどの外部モジュールから来たのですか?ソケット書き込みエラーのエラー処理が欠けているようです。高レベルのtry/catchはソケット書き込みからの非同期エラーを捕捉しません。あなたは 'wss'と' ws'モジュールがどこから来たのかにかかわらず、それらをローカルにキャッチする必要があります。 – jfriend00

答えて

0

がエラーをキャッチするためにあなたのWebSocketにエラーハンドラをアタッチ:あなたがエラーを取得するとき

wss.on("connection", function (ws) { 
    ... 

    ws.on('error', function(err) { 
    console.log('Websocket error!: ' + err); 
    }); 

    ... 
}); 

これは、クラッシュからのNode.jsを防止EPIPEのように。

関連する問題