我正在尝试使用Node.js中的net lib来进行简单的消息传递。在Nodejs.org上的example中,他们提供以下代码作为基本的echo服务器:
var net = require('net');
var server = net.createServer(function(c) { //'connection' listener
console.log('server connected');
c.on('end', function() {
console.log('server disconnected');
});
c.write('hello\r\n');
c.pipe(c);
});
server.listen(8124, function() { //'listening' listener
console.log('server bound');
});
和所述服务器的客户端:
var net = require('net');
var client = net.connect({port: 8124},
function() { //'connect' listener
console.log('client connected');
client.write('world!\r\n');
});
client.on('data', function(data) {
console.log(data.toString());
client.end();
});
client.on('end', function() {
console.log('client disconnected');
});
但是,上面的示例有效,如果从客户端代码中删除client.end();
并强制关闭客户端上的脚本(模拟客户端崩溃),服务器也会崩溃并出现错误:
Error: read ECONNRESET
at errnoException (net.js:904:11)
at TCP.onread (net.js:558:19)
我尝试使用c.on("error",function(){})
和server.on('error', function (e) {});
来捕获服务器代码中的错误,但在这两种情况下,当客户端断开连接而不使用client.end()
时,服务器仍会崩溃
检查此错误的方法是什么,以便服务器执行console.log('connection reset by peer')
而不是崩溃?
更新: 我在我的linux机器上尝试了相同的代码,它看起来工作正常......那么为什么它在Linux中工作但不在Windows中工作?
答案 0 :(得分:2)
您可以通过在您的'createServer'函数中添加此代码来捕获该错误:
process.on('uncaughtException', function (err) {
console.error(err.stack);
console.log("Node NOT Exiting...");
});