我正在使用带有socket.io的node.js来让我的网页访问由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))});
});
});
Run Code Online (Sandbox Code Playgroud)
在正常情况下一切正常,但我不能保证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)
Run Code Online (Sandbox Code Playgroud)
......整个过程结束.
我已经做了很多寻找解决方案; 大多数点击似乎来自程序员,他们首先询问为什么会收到ECONNREFUSED - 建议只是为了确保TCP服务器可用.没有讨论处理失败案件.
这个帖子 - Node.js connectListener仍然调用socket错误 - 建议为'error'事件添加一个处理程序,就像我在上面的代码中所做的那样.这正是我希望它工作的方式......除了它(对我来说),我的程序不会陷入ECONNREFUSED.
我已经尝试过RTFM,而http://nodejs.org/api/net.html#net_event_error_1上 …