0

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

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

因此,如果在终端 A 上我正在启动服务器,而在终端 B 上我正在运行

erl>global:registered_names(). 

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

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

erl>net_adm:ping("terminalB"). 

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

erl>global:registered_names(). 

这次我会从第二个终端看到注册的进程。

仅仅是 net_adm:ping 调用是否有可能完成某种允许通信的工作(如 DNS 解析或类似的东西)?

4

1 回答 1

3

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

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

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

于 2014-08-09T10:08:33.247 回答