为什么 NodeJS KeepAlive 似乎没有按预期工作?

2023-11-24

引自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(使用前将#替换为@)

为什么 NodeJS KeepAlive 似乎没有按预期工作? 的相关文章

随机推荐

  • java ArrayList 的时间复杂度

    Is ArrayListjava中的数组还是列表 get 操作的时间复杂度是多少 O n or O 1 An ArrayList在Java中是一个List这是由一个支持array The get index 方法是恒定时间 O 1 手术 直
  • 无法访问 URL:HTTP/1.1 400 错误 URI

    我想通过 Composer 创建一个新的 Laravel 项目 但出现此错误 Composer Downloader TransportException The http packagist org p fideloper proxy 2
  • greendao 字符串主键 - 如何使用

    在 greendao 常见问题解答中 它说 从 greenDAO 开始 对字符串主键的支持有限 http greendao orm com documentation technical faq 我找不到任何地方说明如何执行此操作 我使用
  • foreach 块缺少结束符“}”

    我今天玩 Razor 很开心 你能看出这个观点有什么问题并解释为什么它是错误的吗 foreach var item in Model if item ID PreviousOrderId div class orderdetail div
  • 当没有更多工作要做时,防止 boost::asio::io_context 返回

    boost asio io context run 当没有待处理的工作时确实返回 我想避免这种行为 以便run 确实无限期地等待新作品 并且可以从另一个线程停止它 我想 这可以通过在io context 并通过调用cancel 当我们想要的
  • 如何为特定类型的所有实例实现我自己的自定义属性编辑器?

    我已经遵循了一些关于创建自定义属性编辑器对话框的教程 但是涉及的事情太多 我无法让它正常工作 我想要完成的是一个带有日期选择器 日历 时间选择器以及 确定 和 取消 按钮的自定义表单 该表单完全没有问题 但是我将如何实现它 以便我可以通过启
  • 解开嵌入式资源的困惑

    编辑 阅读 Tim Schmelter 的答案 1 然后使用此问题作为如何嵌入资源并在运行时访问它们的示例 嵌入式资源的主题经常出现 尤其是当人们询问如何在运行时访问嵌入式文件时 事情变得更加混乱 因为 Visual Studio 为您提供
  • 在 C++ 中打开并显示图像?

    基本上我正在自学 C 程序功能的一部分是打开和关闭指定的图像 我该怎么做呢 或者我会使用什么资源 Thanks 在 C 中 无需任何额外的库 您可以打开图像 但除了一堆二进制数据之外 不会有什么特别有用的东西 那么你必须使用你自己的解码器
  • 分散数组中的重复项

    来源 谷歌面试问题 编写一个例程以确保输入中的相同元素在输出中最大程度地分布 基本上 我们需要放置相同的元素 以这样的方式TOTAL传播是尽可能最大的 Example Input 1 1 2 3 2 3 Possible Output 1
  • Linq 列表中的部分匹配?

    我有一个需要在表中匹配的部分字符串列表 我正在使用谓词构建器 var predicate PredicateBuilder False
  • Mac 上的 RStudio Python 版本更改

    我的问题是 如何将 python 版本更改为 anaconda 3 5 并可以在 RStudio 中使用 anaconda 中安装的模块 我正在使用 RStudio 版本 0 99 891R版本3 2 3 2015 12 10 平台 x86
  • 保存文件时出现权限错误(沙箱)

    我正在尝试将文件保存到沙盒应用程序 OS X 中的路径 但到目前为止 几乎每次尝试保存时都会遇到错误 错误是 Error saving Error Domain NSCocoaErrorDomain Code 513 You don t h
  • 为 iOS Metal 中 MTLBuffer 使用的数据分配内存

    作为后续问题这个答案 我正在尝试用 Metal 中的内核函数替换 CPU 上运行的 for 循环 以并行化计算并提高性能 我的函数基本上是一个卷积 由于我反复收到输入数组值的新数据 数据源于AVCaptureSession 似乎使用newB
  • Java Comparator 给出要比较的属性的名称

    我的问题是这样的 我必须订购一个数据表 表的每一行都是一个存储在 List 中的对象 我们称之为 TableObject 每列数据都是该类的一个属性 通常是字符串 当用户单击任何列时 我必须执行典型的数据排序 所以我考虑将 List 更改为
  • gdb如何显示线程名称

    我的应用程序中创建了许多线程 当我执行命令 infothreads 时 一些线程名称在 gdb 中可见 而其他线程名称则不显示 如何获取所有线程名称本身而不是像 0xb7fe1424 这样的十六进制值 4 Thread 0xb68ffb70
  • 在 Open XML SDK 中的单词书签后插入 OpenXmlElement

    我可以使用以下代码访问我的Word文档中的书签 var res from bm in mainPart Document Body Descendants
  • 如何复制 FTP 服务器上的文件?

    如何复制 FTP 服务器上的文件 我的目标是复制ftp www mysite com test jpg to ftp www mysite com testcopy jpg 要重命名文件 我会使用 var request FtpWebReq
  • 导航栏 rightbaritem 图像按钮错误 iOS 11

    这段代码在ios10上运行正常 我得到了我的标签和一个图像按钮 这是用户照片个人资料 圆形 好的 但是当运行 xcode 9 ios11 模拟器时 我发现它被拉伸了 按钮框架必须是 32x32 当检查 sim 并获取视图并告诉 xcode
  • 如何在日期选择器对话框中设置日期限制

    我想对日期进行限制 以便用户不能选择更多的日期 例如 如果今天是 1 月 1 日 那么用户不应选择超过 7 个日期 我的意思是他不能选择 1 月 9 日 我还希望他不要选择月份和年份 所以我限制他在一周内完成任务 到目前为止我所做的是显示日
  • 为什么 NodeJS KeepAlive 似乎没有按预期工作?

    引自TCP 保活操作方法 为了理解什么是 TCP keepalive 我们将称之为 keepalive 确实如此 您只需读取名称即可 keep TCP 活 这意味着您将能够检查已连接的套接字 也称为TCP套接字 并判断连接是否是 仍在运行或