TLDR:是否存在可重用的代码,用于自动重新连接到有时会失败的TCP服务器?
我正在编写一个服务器应用程序 - 称之为hal
- 它还会打开一些到其他服务器的TCP连接 - 其中包括xbmc
。我最初编写它是为了在xbmc
失败时,xbmc
erlang进程将停止并随后由其主管重新启动。
显然,这不是在erlang中执行持久TCP连接的好方法。首先,它并不真正起作用:当xbmc
失败时,进程将重启太快,主管将关闭整个hal
程序。其次,我显然不应该使用主管:Erlang Supervisor Strategy For Restarting Connections to Downed Hosts(正如我读到的,这个链接的问题只回答“主管是否解决了这个问题?”,并且不是我的问题的重复)
我认为这听起来像是一个相当常见的用例,即使对于偶尔出现故障的主机,也要保持TCP连接尽可能连接。我应该使用一些OTP或其他库代码来实现这个目标吗?
答案 0 :(得分:3)
不,OTP中没有任何内容可以帮助您。
我想说的是,考虑到我自己写这篇文章的次数,现在是编写一个像样的连接管理库的时候了。考虑到最近的连接尝试和结果历史记录,可以给出一个端点地址(主机名和端口),并使用从主机名查找返回的多个地址来为具有多个目标的端点执行快速故障转移。