javascript - Node.js 中的套接字异常

标签 javascript node.js sockets websocket

即使整个脚本包含在 try catch block 中,我的服务器上仍然出现两个关闭进程的异常。 异常(exception)情况是:

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)

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);
}

最佳答案

将错误处理程序附加到您的 websocket 以捕获错误:

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

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

  ...
});

这可以防止 Node.js 在出现 EPIPE 之类的错误时崩溃。

关于javascript - Node.js 中的套接字异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43195092/

相关文章:

javascript - 内容未被从被覆盖的元素内部删除

javascript - 显示隐藏的 div 时页面向右移动

node.js - 无法让 postgres 与 Node 一起工作

c - 如何确定套接字是否已在 Windows 中处于非阻塞模式?

Java 来自套接字 NIO ByteBuffer 的部分消息处理

javascript - 如果在 map() 内部则不能使用

如果父菜单被点击,JavaScript 无法显示子菜单

javascript - 使用 XRegExp 验证 JavaScript (Node.js) 中的 UTF-8 名称

javascript - 与 JS 的包容性 mixin

c++ - 在 C++ 中读取/写入大文件的性能问题