1

我是 socket.io 的新手。所以我的socket.io服务器有时会崩溃,给出以下错误

timers.js:103
        if (!process.listeners('uncaughtException').length) throw e;
                                                                  ^
Error: socket hang up
    at createHangUpError (http.js:1360:15)
    at ServerResponse.OutgoingMessage._writeRaw (http.js:507:26)
    at ServerResponse.OutgoingMessage._send (http.js:476:15)
    at ServerResponse.OutgoingMessage.write (http.js:749:16)
    at XHRPolling.doWrite (E:\sitesroot\0\node_modules\socket.io\lib\transports\
xhr-polling.js:67:17)
    at XHRPolling.HTTPPolling.write (E:\sitesroot\0\node_modules\socket.io\lib\t
ransports\http-polling.js:132:8)
    at XHRPolling.Transport.packet (E:\sitesroot\0\node_modules\socket.io\lib\tr
ansport.js:515:15)
    at Object.<anonymous> (E:\sitesroot\0\node_modules\socket.io\lib\transports\
http-polling.js:79:12)
    at Timer.list.ontimeout (timers.js:101:19)

它没有显示错误发生的位置或原因,因此很确定它与我编写的代码无关。可能与运输有关吗?我对它没有太多的了解。任何有关如何阻止它崩溃的建议将不胜感激。谢谢

4

3 回答 3

6

问题正如@miktam 所说。要解决此问题,您需要在代码中添加错误侦听器。将此代码添加到您的应用程序:

//Error handler
process.on('uncaughtException', function (exception) {
  // handle or ignore error
  console.log(exception);
});

每当出现错误时,它都会控制台记录它而不是让它崩溃。我有完全相同的问题,这解决了它。

于 2013-09-06T18:31:32.747 回答
1

检查这个问题

引用 Isaac Schlueter 的话:

好消息是您不再泄漏内存。坏消息是您确实需要向对象添加错误侦听器。

在大多数应用程序中,您通常可以将 ECONNRESET 视为与优雅关闭大致相同。只需确保您实际上停止使用该套接字,因为它现在已关闭。然而,这不是一个优雅的结束,因为它在任何意义上都不是“优雅的”。在 v0.8.20 之前,节点会愉快地缓冲所有写入重置套接字的操作,从而导致内存爆炸死亡。

于 2013-09-06T16:06:21.067 回答
0

对于我们刚接触 websocket 的人来说,您可能会缺少一些 socket.io 库所需的参数。

您可能使用的是适用于 Websocket 库的,但在使用 socket.io 时ws://localhost可能需要使用ws://localhost:3000/socket.io/?EIO=4&transport=websocket

于 2021-11-27T13:02:59.123 回答