Node.js 随机抛出写 EIO 异常

Posted

技术标签:

【中文标题】Node.js 随机抛出写 EIO 异常【英文标题】:Node.js throws write EIO exception at random time 【发布时间】:2014-03-16 09:31:55 【问题描述】:

我正在使用 node.js + socket.io + Winston (logger) 编写游戏服务器,但我的服务器每天都因为这个异常而死机:

Error: write EIO
at errnoException (net.js:901:11)
at Object.afterWrite (net.js:718:19)

我怀疑这可能是我使用 Winston 的方式。我有 server.jsroom.js 类,我需要 Winston 使用以下语句:var winston = require('winston');server.js 我注册文件日志记录:

winston.add(winston.transports.File,  filename: 'server.log' );
winston.handleExceptions(new winston.transports.File( filename: 'errors.log' ))

room.js 中,我只需调用winston.info() 方法。

可能是因为有很多 room 实例或其他原因吗?

【问题讨论】:

如果在 Windows 上检查这个***.com/questions/17035399/…,如果在 linux 上这是由于读/写错误,比如设备断开连接。 服务器是ubuntu linux。我能做些什么来防止这种行为?即使注册了“uncaughtException”事件 - 我的服务器在它发生时仍然死机 还没有想到这个。如果我这样做,我会在这里发帖。 我也遇到了同样的错误,而且我也在使用 socket.io。错误:在 Object.afterWrite (net.js:720:19) 处的 errnoException (net.js:904:11) 处写入 EIO 摆脱它并编写自己的 TCP 套接字。如果您不使用它与 html 页面通信,这是最好的选择。这就是我所做的,再也没有问题了..socket.io 也在泄漏内存,winston 也是如此。它们不适合大型项目和许多连接 【参考方案1】:

防止应用崩溃

:你可以通过使用这个模块Node.js domain exception handler来防止你的应用程序崩溃 您可以在域块中编写代码,它永远不会再次崩溃。但是要小心,您必须先解决您的问题

【讨论】:

以上是关于Node.js 随机抛出写 EIO 异常的主要内容,如果未能解决你的问题,请参考以下文章

Node.js 服务器随机抛出 EAI_AGAIN

Node.js 承诺和异步异常

Laravel Forge - Node.js Websocket 超时

使用node.js的Websocket上的无效帧头

nodejs运行的时候报错:Error: write EIO以及乱码解决方式

Node.js 为啥 RegExp() 用 \ 抛出错误? [复制]