node.js-处理TCP套接字错误ECONNREFUSED

克里斯·米德

我正在将node.js与socket.io一起使用,以使我的网页能够访问由TCP套接字提供的字符数据。我对node.js很陌生。

用户---->网页<-(socket.io)-> node.js <-(TCP)-> TCP服务器

该代码非常简短:

io.on('connection', function (webSocket) {
    tcpConnection = net.connect(5558, 'localhost', function() {});

    tcpConnection.on('error', function(error) {
        webSocket.emit('error', error);
        tcpConnection.close();
    });

    tcpConnection.on('data', function(tcpData) {
        webSocket.emit('data', { data: String.fromCharCode.apply(null, new Uint8Array(tcpData))});
    });
});

在正常情况下,一切正常,但是我不能保证TCP服务器会一直存在。如果不是,则TCP堆栈将ECONNREFUSED返回给node.js-完全可以预期,我需要妥善处理。目前,我看到了:

events.js:72
    throw er; // Unhandled 'error' event
          ^
Error: connect ECONNREFUSED
    at errnoException (net.js:904:11)
    at Object.afterConnect [as oncomplete] (net.js:895:19)

...,整个过程结束。

我已经做了大量的工作来寻找解决方案。多数点击似乎来自程序员,他们问为什么首先要收到ECONNREFUSED,而建议则只是确保TCP服务器可用。没有讨论处理失败案例。

这篇帖子-Node.js connectListener仍然在套接字错误上被调用-建议像上面的代码中一样为“错误”事件添加一个处理程序。这正是我希望它工作的方式...除非它不(对我而言),我的程序不会捕获ECONNREFUSED。

我已经尝试过RTFM,并且http://nodejs.org/api/net.html#net_event_error_1上的node.js文档建议确实存在“错误”事件-但几乎没有任何线索来使用它。

对其他类似SO帖子(例如Node.js错误:connect ECONNREFUSED)的回答建议使用全局未捕获的异常处理程序,但这对我来说似乎是一个糟糕的解决方案。这不是我的程序由于错误的代码而引发异常,它运行正常-应该按照设计的目的处理外部故障。

所以

  • 我是否以正确的方式处理此问题?(很高兴地承认这是一个新手错误)
  • 是否可以做我想做的事情,如果可以,怎么做?

哦,还有:

$ node -v
v0.10.31
实地罢工

我运行了以下代码:

var net = require('net');

var client = net.connect(5558, 'localhost', function() {
  console.log("bla");
});
client.on('error', function(ex) {
  console.log("handled error");
  console.log(ex);
});

由于我没有打开5558,因此输出为:

$ node test.js
handled error
{ [Error: connect ECONNREFUSED]
  code: 'ECONNREFUSED',
  errno: 'ECONNREFUSED',
  syscall: 'connect' }

这证明该错误已得到很好的处理……表明该错误在其他地方发生。

正如在另一个答案中讨论的那样,问题实际上是此行:

webSocket.emit('error', error);

“错误”事件很特殊,需要在某个地方进行处理(如果不是,则过程结束)。

简单地将事件重命名为“问题”或“警告”会导致整个错误对象通过socket.io套接字传输回网页:

webSocket.emit('warning', error);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Node.js套接字连接错误

来自分类Dev

Node.js-如何跟踪连接的套接字对象?(TCP)

来自分类Dev

管理多个TCP套接字Node.js

来自分类Dev

Node.js MongoDB套接字关闭错误

来自分类Dev

Node.js https.request()错误:套接字挂断

来自分类Dev

使用https的Node.js中的套接字挂起错误

来自分类Dev

Node.JS,套接字IO:相同的源策略错误

来自分类Dev

node.js mysql错误:ECONNREFUSED

来自分类Dev

Gulp / Node.js错误:连接ECONNREFUSED

来自分类Dev

Node.js如何在回调函数之外访问tcp套接字

来自分类Dev

Node js的多个路由获取套接字

来自分类Dev

Laravel Node.js套接字IO

来自分类Dev

使用Node.js套接字代码提交的FTP命令未处理

来自分类Dev

通过UNIX套接字在Node.JS和PHP之间进行连接-EPIPE写入错误

来自分类Dev

通过UNIX套接字在Node.JS和PHP之间进行连接-EPIPE写入错误

来自分类Dev

node.js中的TCP流处理

来自分类Dev

将多个消息发送到Node.js tcp套接字时,它们将作为单个消息流式传输

来自分类Dev

容器Node.js(Express)后出现“ ECONNREFUSED”错误

来自分类Dev

使用node.js MySQL连接ECONNREFUSED仍然出现错误

来自分类Dev

降低Node.js套接字连接的超时

来自分类Dev

我应该使用哪个node.js套接字引擎?

来自分类Dev

Node.js-套接字断开事件无法正常工作

来自分类Dev

长POST node.js上的套接字超时

来自分类Dev

Node.js网络套接字内存泄漏?

来自分类Dev

Node.js中的套接字构造器问题

来自分类Dev

长POST node.js上的套接字超时

来自分类Dev

为每个新的套接字node.js设置超时

来自分类Dev

Node.js,如何检测关闭的套接字?

来自分类Dev

从Node.js代码引发套接字事件

Related 相关文章

热门标签

归档