Socket.IO服务器挂起

时间:2013-09-06 12:27:03

标签: node.js websocket socket.io long-polling

我是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)

它没有显示错误发生的位置或原因,因此非常确定它与我编写的代码无关。可能是运输的东西?我对此并不了解。任何关于如何阻止它崩溃的建议都将受到高度赞赏。感谢

2 个答案:

答案 0 :(得分:6)

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

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

如果出现错误,它将调试它而不是崩溃它。我有完全相同的问题,这解决了它。

答案 1 :(得分:1)

选中此issue

引用Isaac Schlueter:

  

好消息是你不再泄露记忆。坏消息是   您确实需要向对象添加错误侦听器。

     

在大多数应用中,您通常可以将ECONNRESET视为大致相同   优雅的亲密。只要确保你真的停止使用它   socket,因为它现在关闭了。然而,这不是一个优雅的关闭,   因为它在任何意义上都不是“优雅的”。在v0.8.20之前,节点会   愉快地缓冲所有写入重置套接字,导致内存爆炸   死亡。

相关问题