我在一个系统上有一个 gen_server,在其他 4 个系统上有 4 个客户端。当 gen_server 报告“** Removing (timedout) connection **”时,代码按预期运行 3 或 4 天。因为客户端可以在 gen_server 启动之前或之后变为活动状态,所以客户端在每次调用 gen_server 之前执行此代码:
connect_IPDB() ->
% try every 5 sec to connect to the server
case net_kernel:connect_node(?SERVER) of
% When connected wait an additional 5 seconds for stablilty
true -> timer:sleep(5000);
false ->
timer:sleep(5000),
connect_IPDB()
end.
在以任何顺序启动服务器或客户端时,这可以按预期工作。当在服务器上执行时,它们都连接并显示在 nodes() 中。
这是问题所在。在“** Removing (timedout) connection **”错误之后的某个时间,nodes() 显示了所有节点,这意味着客户端没有挂起并且已经执行了上面的代码。然而,与超时节点的通信尚未恢复。如果不重新启动客户端,如何重新建立连接?顺便说一句,重新启动客户端确实解决了这个问题。
任何帮助,不胜感激。