在Node.js TCP套接字中testingKeepalive的function

我一直在testingNode.js TCP套接字中keepalive的function。 看来我在这里错过了一些东西!

这是我的服务器代码:

var net = require('net'); function accept(socket) { socket.setKeepAlive(false); socket.on('data', function(data) { console.log("DATA"); console.log(data); }); socket.on('error', function (e) { console.log("ERROR"); console.log(e); }); socket.on('close', function () { console.log("CLOSE"); }); socket.on('end', function () { console.log("END"); }); socket.write("Hi"); } var server = net.createServer(accept); server.listen(8011); 

这是我的客户代码:

 var net = require('net'); var socket = new net.Socket(); socket.setKeepAlive(false); socket.on('data', function(data) { console.log("DATA"); socket.write(data); }); socket.on('error', function (e) { console.log("ERROR"); console.log(e); }); socket.on('close', function () { console.log("CLOSE"); }); socket.on('end', function () { console.log("END"); }); socket.connect(8011, '127.0.0.1'); 

为什么即使长时间(120秒)没有发送或接收数据,服务器(或客户端)也不closures连接?

我正在使用Node.js版本0.10.5!

因为保持活力在较低的水平。 它发送一个没有任何数据有效载荷的检查包,如果没有答案,那么认为连接中断。

尝试做同样的事情,但从其中一台机器上拔下以太网电缆。

编辑0:

对不起,误了你的代码了一下。

TCP保持活跃特性通常被称为“死对等检测”。 例如,阅读这里的机制 。 在禁用保持活动的情况下,TCP本身没有任何事情会在任何不活动超时之后强制closures连接。 它是像NAT路由器这样的中间设备,可能会使状态失效并中断连接,而不是通信端本身。