【问题标题】:Erlang nodes failed to connectErlang 节点无法连接
【发布时间】:2014-06-28 12:18:29
【问题描述】:

我正在编写一个简单的分布式 Erlang 系统,它允许节点在它们之间传递消息。然而,一些节点相互连接,而其他节点拒绝。启动 Erlang 我使用 -name 标志,例如。

erl -name s@some.server.server

然后在不同的终端启动 Erlang

erl -name a@some.different.server

这两个可以很好地交谈,但是我创建了第三个终端并尝试发送消息,它只允许我将消息发送到第一个节点,而不是第二个节点。即使net_adm:ping 也失败了。

关于如何解决这个问题的任何想法?

谢谢。

【问题讨论】:

    标签: erlang


    【解决方案1】:

    您需要设置正确的 cookie。

    身份验证确定允许与哪些节点通信 彼此。在不同 Erlang 节点的网络中,它内置于 系统处于尽可能低的级别。每个节点都有自己的魔力 cookie,它是一个 Erlang 原子。

    当一个节点试图连接到另一个节点时,魔法cookies 比较的。如果它们不匹配,则连接节点拒绝 连接。

    请参考这里:http://www.erlang.org/doc/reference_manual/distributed.html#id85608

    【讨论】:

      【解决方案2】:

      是否在不同的机器上,

      要让两个节点进行通信,不仅它们都必须是活着的, 但它们也必须共享包含在一个名为的原子中的一些信息 秘密饼干。每个节点在任何时候都有一个 cookie 值, 共享相同值的节点可以通信。每个节点可以 以显式 cookie 值开头,如下所示:erl -sname foo -setcookie blah 如果启动时没有设置任何值,则 Erlang 运行时 系统将获取存储在文件 .erlang.cookie 中的值。如果 该文件不存在,它将在主目录中创建 用户的帐户。

      使用这个

      erl -name foo -setcookie blah
      

      【讨论】:

        猜你喜欢
        • 2022-01-25
        • 2019-07-19
        • 2011-04-11
        • 2017-12-16
        • 2013-04-16
        • 1970-01-01
        • 2016-06-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多