Erlang节点仅在Ping后才能看到对方

时间:2014-08-09 08:22:07

标签: macos erlang otp erlang-shell

我在Mac OSX上运行一些erlang代码,我有这个奇怪的问题。我的应用程序是一个多节点应用程序,其中我有一个服务器的单个实例,在节点之间共享(全局)。

代码工作正常,除了一件烦人的事情:不同的erlang节点(我在不同的终端窗口上运行每个节点)只能在ping之后相互通信!

因此,如果在terminalA上我正在启动服务器,而在terminalB上我正在运行

erl>global:registered_names(). 

terminalB将返回一个空列表,除非在启动terminalA上的服务器之前,我已经运行了ping(来自其中一个终端)。

例如,如果我在启动服务器之前在任一终端上执行此操作:

erl>net_adm:ping("terminalB"). 

然后我启动服务器,从第二个终端列出进程:

erl>global:registered_names(). 

这次我将看到第二个终端的注册过程。

仅仅net_adm:ping调用是否可以进行允许通信的某种工作(如DNS解析或其他类似工作)?

1 个答案:

答案 0 :(得分:3)

  

分布式Erlang系统中的节点松散连接。该   第一次使用另一个节点的名称,例如if   spawn(Node,M,F,A)或net_adm:ping(Node)被称为连接   尝试该节点。

我在此链接中找到了这个:http://www.erlang.org/doc/reference_manual/distributed.html#id85336

我认为你应该阅读这篇文章。