为了账号安全,请及时绑定邮箱和手机立即绑定

节点js ECONNRESET

节点js ECONNRESET

精慕HU 2019-06-28 16:32:41
节点js ECONNRESET我正在使用Socket.IO运行一个Express js应用程序进行聊天,并在24小时内随机获得以下错误5次。节点进程将永远包装,并立即重新启动。问题是重新启动特快会把我的用户赶出他们的房间,而没有人想那样做。Web服务器由HAProxy代理。不存在套接字稳定性问题,只需使用WebSocket和闪存套接字传输。我不能故意复制这个。这是节点v0.10.11的错误:events.js:72         throw er; // Unhandled 'error' event               ^Error: read ECONNRESET     //alternatively it s a 'write'     at errnoException (net.js:900:11)     at TCP.onread (net.js:555:19)error: Forever detected script exited with code: 8error: Forever restarting script for 2 time同时添加了Socket.IO客户端错误处理程序和未处理异常处理程序。似乎这个人捕捉到了错误:process.on('uncaughtException', function (err) {   console.error(err.stack);   console.log("Node NOT Exiting...");});因此,我怀疑这不是Socket.IO问题,而是我对另一个服务器的http请求,或者MySQL/redis连接。问题是错误堆栈不能帮助我识别我的代码问题。下面是日志输出:Error: read ECONNRESET     at errnoException (net.js:900:11)     at TCP.onread (net.js:555:19)我怎么知道是什么原因造成的?如何从错误中获得更多信息?好的,不是很详细,但是下面是带有“Longjohn”的堆栈跟踪:Exception caught: Error ECONNRESET{ [Error: read ECONNRESET]   code: 'ECONNRESET',   errno: 'ECONNRESET',   syscall: 'read',   __cached_trace__:    [ { receiver: [Object],        fun: [Function: errnoException],        pos: 22930 },      { receiver: [Object], fun: [Function: onread], pos: 14545 },      {},      { receiver: [Object],        fun: [Function: fireErrorCallbacks],        pos: 11672 },      { receiver: [Object], fun: [Function], pos: 12329 },      { receiver: [Object], fun: [Function: onread], pos: 14536 } ],   __previous__:    { [Error]      id: 1061835,      location: 'fireErrorCallbacks (net.js:439)',      __location__: 'process.nextTick',      __previous__: null,      __trace_count__: 1,      __cached_trace__: [ [Object], [Object], [Object] ] } }这是原因吗?
查看完整描述

3 回答

?
HUH函数

TA贡献1836条经验 获得超4个赞

我也遇到了一个类似的问题,在Node升级之后,应用程序开始出错。我相信这可以追溯到NodeRelationv0.9.10这个项目:

  • NET:不要压制ECONNRESET(Ben Noordhuis)

以前的版本不会在客户机中断时出错。来自客户端的连接中断将在Node中引发错误ECONNRESET。我相信这是针对Node的功能,所以修复(至少对我来说)是处理错误,我相信您是在默认的异常情况下这样做的。尽管我在net.Socket处理程序中处理它。

你可以证明这一点:

创建一个简单的套接字服务器,并获得Nodev0.9.9和v0.9.10。

require('net')
    .createServer( function(socket) 
    {
           // no nothing
    })
    .listen(21, function()
     {
           console.log('Socket ON')
    })

使用v0.9.9启动它,然后尝试将FTP发送到此服务器。我使用FTP和端口21只是因为我在Windows上,并且有一个FTP客户端,但是没有telnet客户机在手边。

然后从客户端断开连接。(我只是在做Ctrl-C)

使用Nodev0.9.9时不会出现错误,使用Nodev.0.9.10和更高版本时也不会出现错误。

在生产中,我使用的是0.10。但它仍然会给出错误。同样,我认为这是有意的,解决方案是处理代码中的错误。


查看完整回答
反对 回复 2019-06-28
  • 3 回答
  • 0 关注
  • 1092 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信