【问题标题】:Node.js EPIPE errorNode.js EPIPE 错误
【发布时间】:2013-02-05 08:23:33
【问题描述】:

我有一个由 node.js 服务器加上其他文件和一个 HTML 文件组成的应用程序。 HTML 文件是我的客户端,它必须与 node.js 服务器通信。 node.js 服务器使用与其他 node.js 文件创建的对象通过以太网电缆与 PLC 通信。 所以我在服务器和客户端之间创建了一个socket.io连接,在服务器和PLC之间创建了一个tcp连接。

现在出现错误:如果我在连接所有电缆的情况下启动服务器和客户端,我会从 PLC 得到正确答案,如果我在运行时断开电缆,我会收到以下错误:

events.js:71
        throw arguments[1]; // Unhandled 'error' event
                       ^
Error: write EPIPE
    at errnoException (net.js:770:11)
    at Socket._write (net.js:552:19)
    at Socket.write (net.js:511:15)
    at Timer.<anonymous> (C:\Users\Massimo\workspace\Scada\plc_driver\fw_driver.
js:289:20)
    at Timer.exports.setInterval.timer.ontimeout (timers.js:234:14)

我已经尝试使用代码管理服务器中的错误

communication_socket.on('error', function () {
    console.log('Error!');
});

我正在运行节点 0.8.18 并且所有软件包都已更新(我已经进行了 npm update -g

编辑 代码结果

process.on('uncaughtException', function(err) {
    console.log(util.inspect(err));
});

是:

{ [Error: write EPIPE] code: 'EPIPE', errno: 'EPIPE', syscall: 'write' }

有什么建议吗?

【问题讨论】:

  • 所以错误处理程序根本没有被调用?
  • 不,我什至尝试将行 C:\Users\Massimo\workspace\Scada\plc_driver\fw_driver. js:289:20(服务器尝试写入 PLC 的位置)放在 try-catch 内,但没有捕获到异常
  • 所以在 fw_driver.js:289 上写入了通信套接字,对吗?
  • 我有一个this.conn_write.write(new Buffer(message,'ascii')); conn_write 创建为this.conn_write = net.createConnection(port,ip); 我确定这不是范围问题。我认为问题是拔下电缆时的不触发事件。
  • 不管怎样,使用https 已经为我解决了这个问题。

标签: javascript node.js socket.io


【解决方案1】:

Socket IO 错误不会以您可以尝试/捕获的方式抛出。您必须为每个套接字添加一个 on('error', [callback]) 处理程序。您可以在Should stream.pipe forward errors? 中阅读有关此的一些相关讨论您没有说明为什么您有超时以及超时正在写入哪个套接字,所以我无法为您提供更多帮助。

【讨论】:

    【解决方案2】:

    Metor 中的部署命令失败后出现此错误。我可以通过在调试模式下运行应用程序,单击函数断点,然后再次运行部署脚本来修复它。我希望这对某人有所帮助。

    【讨论】:

      猜你喜欢
      • 2014-12-26
      • 2019-01-21
      • 2014-04-15
      • 2012-02-04
      • 2020-06-20
      • 2016-04-25
      • 2017-08-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多