Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Node.js TCP套接字中测试keepalive的功能_Node.js_Sockets_Tcp_Keep Alive - Fatal编程技术网

在Node.js TCP套接字中测试keepalive的功能

在Node.js TCP套接字中测试keepalive的功能,node.js,sockets,tcp,keep-alive,Node.js,Sockets,Tcp,Keep Alive,我一直在测试TCP套接字中keepalive的功能。我好像错过了什么 这是我的服务器代码: var net = require('net'); function accept(socket) { socket.setKeepAlive(false); socket.on('data', function(data) { console.log("DATA"); console.log(data); }); socket.on('er

我一直在测试TCP套接字中keepalive的功能。我好像错过了什么

这是我的服务器代码:

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秒)没有发送或接收数据,服务器(或客户端)也不关闭连接


我正在使用Node.js版本0.10.5

因为keep alive在较低级别工作。它发送一个没有任何数据负载的检查包,如果没有应答,则认为连接中断

尝试执行相同的操作,但从其中一台机器上拔下以太网电缆

编辑0: 对不起,有点误读了你的代码


TCP保持活动特性通常称为“死点检测”。例如,阅读有关它的力学知识。禁用“保持活动”后,TCP本身不会在任何非活动超时后强制关闭连接。像NAT路由器这样的中间设备可能会使状态过期并中断您的连接,而不是通信终端本身。

您的期望是不正确的。禁用它并不意味着空闲连接将超时。启用它意味着空闲连接不会超时。