Node.js net.socket end()与destroy()在FIN_WAIT2中挂起的连接
我正在开发一个RCON实用程序,并试图使用Node.js,但在关闭套接字甚至刚刚结束客户端时,我遇到了FIN_WAIT2问题。服务器是一个游戏服务器,除了RCON配置之外,我无法访问该源。不同的生产RCON客户端在服务器上工作正常,因此应该正确配置 如何正确地关闭、关闭、破坏Node.js中的套接字连接?我真不敢相信我被这样一个简单的观念所束缚。我在Node.js中找到了很多关于这个问题的老文章,有一段时间以前的链接 即使是一个简单的测试,包括一个建议Node.js net.socket end()与destroy()在FIN_WAIT2中挂起的连接,node.js,sockets,tcp,netstat,Node.js,Sockets,Tcp,Netstat,我正在开发一个RCON实用程序,并试图使用Node.js,但在关闭套接字甚至刚刚结束客户端时,我遇到了FIN_WAIT2问题。服务器是一个游戏服务器,除了RCON配置之外,我无法访问该源。不同的生产RCON客户端在服务器上工作正常,因此应该正确配置 如何正确地关闭、关闭、破坏Node.js中的套接字连接?我真不敢相信我被这样一个简单的观念所束缚。我在Node.js中找到了很多关于这个问题的老文章,有一段时间以前的链接 即使是一个简单的测试,包括一个建议 const net = require('
const net = require('net');
mySock = net.connect({
host : '127.0.0.1',
port: 21214,
});
mySock.close = function(data) {
var Self = this;
if (data) this.write(data, function() {
Self.destroy();
} );
else this.destroy();
};
setTimeout(f1, 1000);
function f1 () {
// mySock.destroy();
// mySock.end();
mySock.close();
}
导致连接保持FIN_WAIT2状态。似乎永远如此。最终FIN_WAIT2消失了,但它让游戏服务器处于某种奇怪的状态,即来自其他不同生产RCON应用程序的新连接在服务器重新启动之前将无法工作
tcp 1 0 127.0.0.1:21214 127.0.0.1:35560 CLOSE_WAIT 5724/GameServer
tcp 0 0 127.0.0.1:35560 127.0.0.1:21214 FIN_WAIT2 -
我不知道Node.js需要做什么才能彻底关闭它。如果我使用另一个完全基于C的RCON库,比如,我永远不会遇到问题,而且只要命令一执行,就不会有延迟的
netstat
连接。当然,除非我首先运行Node.js测试程序。在这种情况下,C RCON将在服务器重新启动之前无法连接。问题在于对等方尚未关闭其端。与此端无关。两端显示连接的一个片段已打开。当我运行C RCON工具时,绝对没有剩余的netstat片段,因此可以在不打开任何东西的情况下让RCON连接到此游戏服务器。我在Node.js中看不到如何做到这一点,也看不到在没有解决方案的情况下反复提到这个问题。大部分时间都是几年前的事了,所以我猜人们只是停止寻求帮助,或者切换语言,或者在TCP堆栈上使用异国情调的计时器来克服这个问题。对于相同的连接,两端都不可能显示FIN-WAIT-2。CLOSE-WAIT表示本地应用程序尚未关闭套接字。是的,我明白了。只有一面显示FIN_WAIT2。我不知道如何关闭Node.js中的套接字,所以它不会这样做。而且似乎也没有人这样做,这毫无意义。即使是文档中的例子也可以做到这一点。问题是对等方还没有结束它的工作。与此端无关。两端显示连接的一个片段已打开。当我运行C RCON工具时,绝对没有剩余的netstat片段,因此可以在不打开任何东西的情况下让RCON连接到此游戏服务器。我在Node.js中看不到如何做到这一点,也看不到在没有解决方案的情况下反复提到这个问题。大部分时间都是几年前的事了,所以我猜人们只是停止寻求帮助,或者切换语言,或者在TCP堆栈上使用异国情调的计时器来克服这个问题。对于相同的连接,两端都不可能显示FIN-WAIT-2。CLOSE-WAIT表示本地应用程序尚未关闭套接字。是的,我明白了。只有一面显示FIN_WAIT2。我不知道如何关闭Node.js中的套接字,所以它不会这样做。而且似乎也没有人这样做,这毫无意义。甚至文档中的示例也可以做到这一点