为什么在尝试在Node.js中重新连接TCP连接后会出现ECONNREFUSED错误?
我正在尝试使用以下命令在Node.js中打开与另一个程序的TCP连接:为什么在尝试在Node.js中重新连接TCP连接后会出现ECONNREFUSED错误?,node.js,sockets,Node.js,Sockets,我正在尝试使用以下命令在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(fun
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
});
如果另一个程序未运行(因此未侦听),则第一次正确处理连接错误,但如果我在超时后再次尝试连接(未成功),则会出现以下错误:
events.js:68
throw arguments[1]; // Unhandled 'error' event
Error: connect ECONNREFUSED
现在有人知道为什么第一次正确处理了不成功的连接,而第二次却没有?我希望在等待另一个程序启动时继续尝试连接。每次重试时,您都必须绑定到,因为每次调用都会返回一个带有自己事件绑定的新连接:
// ...
setTimeout(function () {
connection = net.connect(18003, ipAddress,
function() {
});
connection.on('error', function () {
console.log('Connection retry error');
});
}, 10000); //Try to reconnect
// ...
要连续重试,请将“设置”包装在可根据需要调用的函数中:
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();
您必须在每次重试时绑定到,因为对的每次调用都会返回一个具有自己事件绑定的新事件:
// ...
setTimeout(function () {
connection = net.connect(18003, ipAddress,
function() {
});
connection.on('error', function () {
console.log('Connection retry error');
});
}, 10000); //Try to reconnect
// ...
要连续重试,请将“设置”包装在可根据需要调用的函数中:
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();
@Jonathan Lonowski,当我使用ur代码时,我注意到在服务器重启时,它会打开多个连接。“错误”事件在关闭套接字之前发生。移动 对套接字关闭事件的递归调用正常工作
function setupConnection() {
connection = net.connect(18003, ipAddress, function () {
});
connection.on('close', function() {
console.log('Connection closed');
setTimeout(setupConnection, 10000); //Try to reconnect EDITED
});
connection.on('error', function() {
console.log('Connection error');
});
}
setupConnection();
@Jonathan Lonowski,当我使用ur代码时,我注意到在服务器重启时,它会打开多个连接。“错误”事件在关闭套接字之前发生。移动 对套接字关闭事件的递归调用正常工作
function setupConnection() {
connection = net.connect(18003, ipAddress, function () {
});
connection.on('close', function() {
console.log('Connection closed');
setTimeout(setupConnection, 10000); //Try to reconnect EDITED
});
connection.on('error', function() {
console.log('Connection error');
});
}
setupConnection();
您需要为新创建的
连接重新注册'error'
事件处理程序。您需要为新创建的连接重新注册'error'
事件处理程序。我希望这个答案加倍,因为它节省了我很多时间。包装设置功能,它将节省大量时间。在超时时调用wrapped函数之前,请确保.close()
或.destroy()
连接以防止内存泄漏。再等几秒钟,以避免出现赛况。我想双倍提高这个答案,因为它节省了我很多时间。包装设置功能,它将节省大量时间。在超时时调用wrapped函数之前,请确保.close()
或.destroy()
连接以防止内存泄漏。并等待几秒钟以避免比赛条件。