套接字心跳与保活

2023-11-25

为套接字实现自己的心跳和设置“keepalive”有何优缺点?

我在某处读到,保活有时可能会失败,连接无论如何都会关闭(取决于网络结构)。另一件事是,自己的心跳可以检测应用程序是否响应(不仅仅是套接字)。

我的主要目标是确保所有这些:即使没有发送数据(除了可能的心跳),保持连接处于活动状态,双方快速连接丢失检测,应用程序响应检测。

我已经在两端实现了一个简单的心跳,并且效果很好,但是我想知道是否可以用开箱即用的 keepalive 功能来替换它。


TCP 内置的 keepalive 功能的一个问题是它并不总是易于配置。例如,在 Linux 上,setsockopt() 有多种选项(例如 TCP_KEEPIDLE、TCP_KEEPCNT 和 TCP_KEEPINTVL),您可以使用它们将 keepalive 的行为设置为您想要的,但是在其他操作系统中,这些行为不容易调整,至少不能以编程方式调整。因此,如果您希望程序的保活行为能够移植到各种操作系统并在所有操作系统上表现一致,那么滚动您自己的心跳通常是最佳选择。

另一方面,可能有一些程序或网络协议不容易支持心跳/无操作消息的概念(或者您可能希望您的程序能够使用许多协议,而不必为每个受支持的协议提供单独的 keepalive 逻辑),在这种情况下,您可能需要使用内置的 keepalive,因为它能够发送和接收“透明”keepalive 数据包,而不会影响 TCP 数据流的内容。在这种情况下,内置的 keepalive 可能会很有用(特别是如果您确实只需要 keepalive 代码在 Linux 下工作)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

套接字心跳与保活 的相关文章

随机推荐

  • ASP.Net - 在负载平衡环境中处理会话数据?

    ASP Net 如何在负载平衡环境中处理会话数据 假设用户在浏览几个页面时发出多个请求 所有请求是否都发送到负载均衡器中的同一服务器 如果它们不都指向同一服务器我该怎么办 我如何处理我的会话数据 您需要确保您的 NLB 能够启用 粘性 会话
  • 如何强制运行时常量成为编译时常量?

    所以我正在从事一个基于化学的项目并遇到了这个棘手的问题 我有一堆函数进行化学类型计算 并希望将 avogadros 数作为函数的默认参数传递 我就用代码来说话吧 class Constants must be readonly to b c
  • 我可以用 C# 读取 Outlook (2003/2007) PST 文件吗?

    是否可以使用 C 读取 PST 文件 我想将其作为独立的应用程序来执行 而不是作为 Outlook 插件 如果可能的话 如果见过other SO 问题 similar提到这一点邮件导航器但我希望在 C 中以编程方式执行此操作 我看过Micr
  • C++:继承和运算符重载

    我有两个结构 template
  • 禁用 ASP.net 缓存

    有没有办法禁用所选页面上的 asp net 缓存 如果这可以通过 web config 来完成 那就太好了 Or In the code behind Response Cache SetCacheability HttpCacheabil
  • 在我的本地 XAMPP 服务器上禁用输出缓冲

    由于某种原因 我的 XAMPP 服务器正在缓冲 PHP 的输出 我想让它随波逐流地吐出来 有人知道我需要更改哪些设置才能实现此目的吗 XAMPP 似乎已设置output buffering默认为 4096 因此内容以 4K 块的形式提供 可
  • 如何在ASP.net Core中添加基于环境的DbContext

    这就是我当前在 Startup cs 的 ConfigureServices 方法中添加 DbContext 的方式 public void ConfigureServices IServiceCollection services ser
  • 遵循 docker-compose 教程时没有创建 django 应用程序

    我正在遵循 docker compose 教程 尝试找出如何部署 django 应用程序 http docs docker com compose django 一切都很顺利 应用程序甚至可以工作 但是 django 项目文件夹compos
  • 等待 Console.ReadLine()

    我目前正在构建一个异步控制台应用程序 其中我创建了类来处理应用程序的不同区域 我创建了一个 InputHandler 类 我设想它会等待 Console ReadLine 输入 但是 您不能等待这样的函数 因为它不是异步的 我当前的解决方案
  • 如何正确对 [模板化] C++ 程序进行基准测试

    我现在确实需要优化 C 代码 我正在编写一个分子模拟库 我需要添加一个新功能 我过去已经尝试添加此功能 但随后我使用了在嵌套循环中调用的虚拟函数 我对此有不好的感觉 第一次实施证明这是一个坏主意 然而 这对于测试这个概念来说是可以的 背景
  • 通过正则表达式仅允许字母和“特殊”字母(éèà 等)

    我正在尝试匹配一个字符串以查看它是否仅由字母组成 各种字母都应该被允许 所以典型的a zA Z 但是也 etc 我尝试将其与以下正则表达式进行匹配 S 但这也允许像这样的角色 lt gt 等等 这些显然是不属于名字的字符 当我只想允许字母和
  • varchar 是否会因数据碎片而导致性能下降?

    数据库引擎如何在内部处理 varchar 列 对于定义为的列char 100 DBMS 在磁盘上分配 100 个连续字节 但是 对于定义为的列varchar 100 情况可能并非如此 因为整个要点varchar是不分配比存储列中实际数据值所
  • WPF 从 ViewModel 打开一个新视图

    这是我的第一次WPF MVVM应用程序 这是我的结构 与我的一个项目app xaml打开应用程序并覆盖OnStartup来解析主窗口 我这样做是因为参考文献 我的观点的一个项目 我的 ViewModel 的一个项目 我的模特的一个项目 我有
  • 我不知道Python中的__iter__,谁能给我一个好的代码示例

    我的代码运行错误 class a object def iter self return 33 b a aaa b bbb c a print b itervalues print c itervalues 请尝试使用代码 而不是文本 因为
  • JavaScript 在 JSON 对象内搜索

    我的应用程序中有一个 JSON 字符串 对象 list name my Name id 12 type car owner name my Name2 id 13 type car owner2 name my Name4 id 14 ty
  • 将 PFQueryTableViewController (来自解析)与 Swift 结合使用

    我已将 UITableViewController 添加到故事板 并创建 分配一个从 PFQueryTableViewController 继承到故事板控制器的新类 然后我编写了以下初始化函数 但我无法使表视图控制器正常工作 为了实例化 P
  • 尝试使用 Discord.py 重写将消息发送到特定频道,但它不起作用

    我目前正在开发一个不和谐的机器人 我尝试在用户升级后使用 Discord py 重写将消息发送到特定频道 但我收到此错误 await channel message send f message author mention is now
  • 为什么构造函数中带有可选参数的类不能满足 new() 泛型约束?

    以下代码无法编译 产生 Widget 必须是具有公共无参数构造函数的非抽象类型 错误 我认为编译器拥有它需要的所有信息 这是一个错误吗 疏忽 或者是否存在某些情况下这无效 public class Factory
  • 如何连接 Wordpress 登录系统以编程方式阻止某些用户?

    我正在开发一个基于 WordPress 的门户网站 该门户网站与定制的电子商务集成 电子商务还充当 控制面板 所有角色都在那里设置 一些用户被记录但 不活跃 他们不应该能够登录 WordPress 出于这个原因 我需要连接到 Wordpre
  • 套接字心跳与保活

    为套接字实现自己的心跳和设置 keepalive 有何优缺点 我在某处读到 保活有时可能会失败 连接无论如何都会关闭 取决于网络结构 另一件事是 自己的心跳可以检测应用程序是否响应 不仅仅是套接字 我的主要目标是确保所有这些 即使没有发送数