我在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解析或其他类似工作)?
答案 0 :(得分:3)
分布式Erlang系统中的节点松散连接。该 第一次使用另一个节点的名称,例如if spawn(Node,M,F,A)或net_adm:ping(Node)被称为连接 尝试该节点。
我在此链接中找到了这个:http://www.erlang.org/doc/reference_manual/distributed.html#id85336
我认为你应该阅读这篇文章。