我正在尝试使用以下命令在Node.js中打开TCP连接到另一个程序:
connection = net.connect(18003, function() {
});
connection.on('close', function() {
console.log('Connection closed');
});
connection.on('error', function() {
console.log('Connection error');
setTimeout(function () {
connection = net.connect(18003, ipAddress,
function() {
});
}, 10000); //Try to reconnect
});
Run Code Online (Sandbox Code Playgroud)
如果其他程序没有运行(因此没有监听),第一次正确处理连接错误,但如果我在超时后再次尝试连接(失败),我会收到以下错误:
events.js:68
throw arguments[1]; // Unhandled 'error' event
Error: connect ECONNREFUSED
Run Code Online (Sandbox Code Playgroud)
现在有人为什么第一次正确处理不成功的连接而不是第二次?我想在等待其他程序启动时继续尝试连接.
每次调用时都必须绑定到'error'事件,因为每次调用都会net.connect()返回一个net.Socket带有自己事件绑定的new :
// ...
setTimeout(function () {
connection = net.connect(18003, ipAddress,
function() {
});
connection.on('error', function () {
console.log('Connection retry error');
});
}, 10000); //Try to reconnect
// ...
Run Code Online (Sandbox Code Playgroud)
要继续重试,请将"setup"包装在可根据需要调用的函数中:
function setupConnection() {
connection = net.connect(18003, ipAddress, function () {
});
connection.on('close', function() {
console.log('Connection closed');
});
connection.on('error', function() {
console.log('Connection error');
setTimeout(setupConnection, 10000); //Try to reconnect
});
}
setupConnection();
Run Code Online (Sandbox Code Playgroud)