自动重新连接到 TCP 主机

Posted

技术标签:

【中文标题】自动重新连接到 TCP 主机【英文标题】:Automatically reconnecting to a TCP host 【发布时间】:2012-07-17 11:00:14 【问题描述】:

TLDR:是否存在用于自动重新连接到有时会失败的 TCP 服务器的可重用代码?


我正在编写一个服务器应用程序——称之为hal——它还打开了一些到其他服务器的TCP连接——其中包括xbmc。我最初编写它是为了当xbmc 失败时,xbmc erlang 进程将停止并随后由其主管重新启动。

显然,这不是在 erlang 中进行持久 TCP 连接的好方法。首先,它并没有真正起作用:当xbmc 失败时,进程会重启得太快,主管会关闭整个hal 程序。其次,我显然不应该为此使用主管:Erlang Supervisor Strategy For Restarting Connections to Downed Hosts(当我阅读时,这个链接的问题只回答“主管解决这个问题吗?”,而不是我的问题的重复)

我认为这听起来像是一个相当常见的用例,即使主机不时出现故障,也要尽可能保持 TCP 连接的连接。我应该使用一些 OTP 或其他库代码来实现这一点吗?

【问题讨论】:

【参考方案1】:

不,OTP 中没有任何内容可以为您执行此操作。

我会说,考虑到我自己编写的次数,现在是编写一个体面的连接管理库的时候了。特别是考虑到最近的连接尝试和结果历史记录,可以给定一个端点地址(主机名和端口),并使用从主机名查找返回的多个地址为具有多个目标的端点执行快速故障转移。

【讨论】:

谢谢。回答“不”并不总是那么容易 :) 对于您的下一个开源项目,我建议使用此连接管理器 :D 碰巧,我现在或多或少正在写它。如果/何时发布,我会更新我的答案。

以上是关于自动重新连接到 TCP 主机的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot 使用 JdbcTemplate 和多个数据源自动重新连接到 PostgreSQL

visualvm - 自动(JMX)连接到应用程序?

Azure数据工作室不会重新连接到本地托管的数据库

sh 创建一个自动关闭ssh隧道到运行VirtualBox的主机并连接到VirtualBox VRDE或内部Windows VM RDP服务器u

如何将TCP连接重新连接到同一端口?

JDBC 通过端口 1433 连接到主机 localshost 的 TCP/IP 连接失败。错误:“null。