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.js
和 room.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 异常的主要内容,如果未能解决你的问题,请参考以下文章
Laravel Forge - Node.js Websocket 超时