我是 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 node_modulessocket.iolibtransports
xhr-polling.js:67:17)
at XHRPolling.HTTPPolling.write (E:sitesroot node_modulessocket.iolibt
ransportshttp-polling.js:132:8)
at XHRPolling.Transport.packet (E:sitesroot node_modulessocket.iolibtr
ansport.js:515:15)
at Object.<anonymous> (E:sitesroot node_modulessocket.iolibtransports
http-polling.js:79:12)
at Timer.list.ontimeout (timers.js:101:19)
它没有显示错误发生的位置或原因,因此可以肯定它与我编写的代码无关。可能是运输工具的东西?我对此知之甚少。任何关于如何阻止它崩溃的建议将不胜感激。谢谢
问题如@miktam所述。若要解决此问题,需要向代码添加错误侦听器。将此代码添加到您的应用程序中:
//Error handler
process.on('uncaughtException', function (exception) {
// handle or ignore error
console.log(exception);
});
当出现错误时,它会控制台.log它而不是崩溃它。我遇到了完全相同的问题,这解决了它。
检查此问题
引用艾萨克·施吕特的话:
好消息是你不再泄漏内存。坏消息是 您确实需要向对象添加错误侦听器。
在大多数应用程序中,您通常可以将ECONNRESET视为大致相同的 一个优雅的结束。只要确保你真的停止使用它 套接字,因为它现在已经关闭。然而,这不是一个优雅的结束, 因为它在任何意义上都不是"优雅的"。在 v0.8.20 之前,节点将 愉快地缓冲所有写入以重置套接字,导致内存爆炸 死亡。
对于刚接触 websocket 的我们来说,您可能缺少 socket.io 库所需的一些参数。
您可能正在使用的是适用于 Websocket 库的ws://localhost
,但在使用 socket.io 时可能需要使用 ws://localhost:3000/socket.io/?EIO=4&transport=websocket