【问题标题】:Naming nodes in ErlangErlang中的命名节点
【发布时间】:2010-09-29 15:34:21
【问题描述】:

我正在使用 5.4 文档中的 distributed programming tutorial,但遇到了节点名称问题。

由于破折号,我的 MacBook 的默认名称 (jamess-macbook) 不能很好地与 Erlang 的节点命名方案配合使用:

(salt@jamess-macbook)4> {my_process, pepper@jamess-macbook} ! start
** exception error: bad argument in an arithmetic expression
     in operator  -/2
        called as pepper@jamess - macbook

我确信有一个简单的方法可以解决这个问题,除了重命名我想要运行 Erlang 的所有机器,但我在文档中看不到它。

有什么建议吗?

【问题讨论】:

    标签: erlang


    【解决方案1】:

    你只需要正确地引用原子。 'pepper@jamess-macbook'(带单引号)是节点的名称。

    一个原子应该包含在单个 引号 (') 如果它不以 a 开头 小写字母或如果它包含 字母数字以外的其他字符 字符、下划线 (_) 或 @。 -- Erlang Reference Manual

    使用短节点名称 (-sname) 会产生各种其他后果(与长节点名称节点的互操作性受限、不将 dns 信息加载到 inet_db 等)。

    【讨论】:

    • 更好——我试过双引号,而不是单引号;事实上,我没有意识到它们在语义上是不同的!
    【解决方案2】:

    启动 Erlang 解释器:

    $ erl -sname node_name
    

    其中node_name 是您要用来指代机器的名称。

    您甚至可以通过启动多个解释器实例来模拟单台机器上的分布式系统,每个实例都有不同的节点名称。

    【讨论】:

    • 啊,我不知道你可以通过 sname 提供完整的节点名称(name@machine)!
    猜你喜欢
    • 2010-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-22
    • 1970-01-01
    • 2016-04-12
    • 1970-01-01
    • 2013-08-12
    相关资源
    最近更新 更多