当前位置: 首页 > 面试题库 >

如何在Node.js中调试错误ECONNRESET?

左丘宜年
2023-03-14
问题内容

我正在使用Socket.io运行Express.js应用程序用于聊天Web应用程序,并且在24小时内大约5次随机收到以下错误。节点进程将被永久封装,并立即重新启动。

问题是重新启动Express会使我的用户离开他们的房间,而没人希望这样做。

Web服务器由HAProxy代理。仅使用websockets和flashsockets传输就没有套接字稳定性问题。我无法有意复制此内容。

这是Node的错误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: 8
    error: Forever restarting script for 2 time

编辑(2013-07-22)

添加了socket.io客户端错误处理程序和未捕获的异常处理程序。似乎此错误捕获了:

    process.on('uncaughtException', function (err) {
      console.error(err.stack);
      console.log("Node NOT Exiting...");
    });

因此,我怀疑这不是Socket.io问题,而是对我执行的另一台服务器或MySQL /
Redis连接的HTTP请求。问题是错误堆栈无法帮助我识别代码问题。这是日志输出:

    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] ] } }

在这里,我提供Flash套接字策略文件:

    net = require("net")
    net.createServer( (socket) =>
      socket.write("<?xml version=\"1.0\"?>\n")
      socket.write("<!DOCTYPE cross-domain-policy SYSTEM \"http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd\">\n")
      socket.write("<cross-domain-policy>\n")
      socket.write("<allow-access-from domain=\"*\" to-ports=\"*\"/>\n")
      socket.write("</cross-domain-policy>\n")
      socket.end()
    ).listen(843)

这可能是原因吗?


问题答案:

我用于提供Flash策略文件的一个简单的TCP服务器导致了这一问题。我现在可以使用处理程序来捕获错误:

# serving the flash policy file
net = require("net")

net.createServer((socket) =>
  //just added
  socket.on("error", (err) =>
    console.log("Caught flash policy server socket error: ")
    console.log(err.stack)
  )

  socket.write("<?xml version=\"1.0\"?>\n")
  socket.write("<!DOCTYPE cross-domain-policy SYSTEM \"http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd\">\n")
  socket.write("<cross-domain-policy>\n")
  socket.write("<allow-access-from domain=\"*\" to-ports=\"*\"/>\n")
  socket.write("</cross-domain-policy>\n")
  socket.end()
).listen(843)


 类似资料:
  • 问题内容: 当我得到以下错误: 我可以按照什么程序来修复它? 作者注意 :许多与此错误有关的问题鼓励我发布此问题以供将来参考。 问题答案: 使用NODE_DEBUG = child_process,向@ karl-richter积分。 简单,快速,2019年10月 用包装纸装饰,@ @ jiaji-zhou。 简单,快捷,2015年1月 漫长的过程,归功于@laconbass。 复杂,耗时,201

  • 作者注:很多关于这个错误的问题促使我把这个问题贴出来,以备将来参考。 相关问题: 对节点_ENV=production使用spawn函数 节点。jschild_进程。spawn Enoint错误-仅在supervisord下 产卵节点。js错误 https://stackoverflow.com/questions/27603713/nodejs-spawn-enoent-error-on-tra

  • 我正在从可能被压缩的服务器下载内容,所以我使用了我在不同地方找到的样板: 问题是,如果HTTPS请求因网络错误而失败,我有时会引发以下异常: 该“错误”事件处理程序未捕获异常。那么我如何捕获它,以便能够正确地清理文件并知道如何重试?

  • 作者注:这个错误的许多问题鼓励我张贴这个问题,以供将来参考。 相关问题: 使用node_env=production的spawn函数 node.js child_process.spawn ENOENT error-仅在supervisord 生成ENOENT Node.js错误 https://stackoverflow.com/questions/27603713/nodejs-spawn-e

  • 如何调试Python分段错误? 我们试图在SuSE 12.3上运行我们的python代码。我们得到了可复制的分割错误。多年来,python代码一直在其他平台上运行,没有出现分段错误。 我们只编码Python,没有C扩展.... 最好的调试方法是什么?我知道一点ansi c但那是十年前的事了... Python 2.7.5 更新 分段错误发生在解释器关闭时。 我可以多次运行脚本: 但如果我使用Ctr

  • 问题内容: 如何调试Python分段错误? 我们正在尝试在SuSE 12.3上运行python代码。我们得到可再现的分割错误。多年以来,python代码一直在没有分段错误的其他平台上运行。 我们只编写Python,没有C扩展名.... 调试此问题的最佳方法是什么?我知道一点,但这是十年前的事。 Python 2.7.5 更新资料 分段错误发生在解释器关闭时。 我可以多次运行该脚本: 但是,如果我将