我正在编写一个简单的分布式Erlang系统,它允许节点在它们之间传递消息。然而,一些节点彼此连接而其他节点拒绝。启动Erlang我使用-name
标志,例如
erl -name s@some.server.server
然后在另一个终端启动Erlang with
erl -name a@some.different.server
这两个可以说得很好,但我创建了第三个终端并尝试发送消息它只允许我发送消息到第一个节点,而不是第二个节点。即使net_adm:ping
失败了。
有关如何解决此问题的任何想法?
感谢。
答案 0 :(得分:1)
是在不同的机器上,
要让两个节点进行通信,不仅它们都必须存活, 但他们也必须分享一个叫做原子的信息 秘密饼干。每个节点随时都有一个cookie值, 共享相同值的节点可以进行通信。每个节点都可以 以明确的cookie值开头,如下所示:erl -sname foo -setcookie blah如果在启动时没有设置值,则为Erlang运行时 系统将获取存储在文件.erlang.cookie中的值。如果 该文件不存在,它将在主目录中创建 用户的帐户。
使用此
erl -name foo -setcookie blah
答案 1 :(得分:1)
您需要设置正确的Cookie。
身份验证确定允许与哪些节点通信 彼此。在不同Erlang节点的网络中,它内置于 系统处于尽可能低的水平。每个节点都有自己的魔力 cookie,这是一个Erlang原子。
当节点尝试连接到另一个节点时,神奇的cookie就是 相比较。如果它们不匹配,则连接的节点拒绝 连接。
请参阅此处:http://www.erlang.org/doc/reference_manual/distributed.html#id85608