引自TCP 保活操作方法:
为了理解什么是 TCP keepalive(我们将称之为
keepalive) 确实如此,您只需读取名称即可:keep TCP
活。这意味着您将能够检查已连接的套接字
(也称为TCP套接字),并判断连接是否是
仍在运行或如果它坏了.
那么为什么是下面的代码不扔东西当互联网连接中断时?
var tls = require('tls');
var socket = tls.connect(443, "google.com", function connected() {
console.log('connected');
});
socket.setNoDelay(true);
socket.setKeepAlive(true, 0);
socket.setTimeout(0, function(){
console.log('timeout');
});
socket.on('data', function(data) {
console.log(data);
});
socket.on('close', function() {
console.error("close");
});
socket.on('error', function(err) {
console.error("error", err);
});
在 MacOS/Debian 上测试,使用 NodeJS v0.10.17
Quoting 人 7 TCP:
tcp_keepalive_time(整数;默认值:7200;自 Linux 2.2 起)
TCP 开始发送保持活动探测之前连接需要空闲的秒数。仅当启用 SO_KEEPALIVE 套接字选项时才会发送保持活动消息。默认值为 7200 秒(2 小时)。空闲连接大约在额外 11 分钟(9 探测间隔为 75 秒)启用保持活动状态时。
因此,大约 10 分钟后(在 MacOS 10.8 上)节点发出错误:
error { [Error: read ETIMEDOUT] code: 'ETIMEDOUT', errno: 'ETIMEDOUT', syscall: 'read' }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)