gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 02:32:53 31 4
gpt4 key购买 nike

我一直在Node.js 中测试keepalive 的功能TCP套接字。看来我在这里遗漏了什么!

这是我的服务器代码:

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 keep-alive 特性通常被称为“dead peer detection”。阅读其机制,例如,here .禁用保持事件后,TCP 本身不会在任何不活动超时后强制关闭连接。 NAT 路由器等中间设备可能会使状态过期并中断您的连接,而不是通信端本身。

关于node.js - 在 Node.js TCP 套接字中测试 keepalive 的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16573452/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com