【问题标题】:Erlang distributed message sending - what is the meaning of the first atom in the tuple?Erlang分布式消息发送-元组中的第一个原子是什么意思?
【发布时间】:2012-10-12 20:41:52
【问题描述】:

Erlang User's Guidesend operator 描述为

8.9 发送

Expr1 ! Expr2

Expr2 的值作为消息发送到指定的进程 Expr1Expr2 的值也是 表达。

Expr1 必须评估为 pid注册名称(原子)或 元组 {Name,Node}Name 是一个原子,Node 是一个节点名称,也是一个 原子。

  • 如果 Expr1 计算结果为一个名称,但该名称未注册,则会出现 badarg 运行时错误。
  • 向 pid 发送消息永远不会失败,即使 pid 标识了一个不存在的进程。
  • 分布式消息发送,也就是说,如果Expr1 评估为元组{Name,Node}(或位于另一个节点的pid),也永远不会 失败。

在分布式消息发送的情况下,从远程节点或进程的代码中,我不清楚{Name,Node} 中的第一个原子代表什么。

感谢您的帮助。

【问题讨论】:

    标签: erlang


    【解决方案1】:

    您引用的句子中的语法有点模棱两可。三个选项是:

    • 进程 ID,它是从某些 Erlang 函数返回的不透明数据类型,主要是 spawn 和 spawn_link。
    • 本地节点(即本地 VM)上的注册名称。需要这样做的一个示例是长时间运行的服务器应用程序,您希望进程能够与关键实用程序服务(例如 DNS 缓存)进行通信。
    • 一个包含注册名称和它所在节点名称的元组(如果是另一个 VM,可能在不同的主机上)。

    第一个是迄今为止最常见的。注册名称旨在谨慎使用。

    我建议从 Learn You Some Erlang 中的并发章节开始,并根据需要回溯到前面的章节: http://learnyousomeerlang.com/the-hitchhikers-guide-to-concurrency#dont-panic

    【讨论】:

      【解决方案2】:

      假设您有两个节点:node1@localhost 和 node2@localhost,并且您在 node1 中将一个 erlang 进程注册为 process1。

      您可以将消息从 node2 发送到 node1 中的 process1:

      {process1, node1@localhost} ! yourmessage.
      

      希望这会有所帮助

      【讨论】:

        【解决方案3】:

        在这个表达式中:

        Expr1 !表达式2

        Expr1 必须评估为 (1) pid、(2) 注册名称(原子) 或 (3) 一个元组 {Name,Node}

        在第三种情况下,正如您想知道的,当 Expr1 计算为 tuple {Name, Node} 时,Name 是进程的注册名称(原子),Node 是节点名称(也是一个原子)像 name@server

        例如:

        % ------- in your node -------
        (you@server)> register(shell, self()).
        
        % ------- in my node -------
        (me@server)> {shell, you@server} ! "hey you!".
        

        请注意,在向其他节点中的其他进程发送消息之前,首先您必须连接到它们。例如使用 spawn(Node, Module, Function, Arguments)net_adm:ping(Node)

        出于测试目的,使用 nodes() 函数列出连接的节点。

        【讨论】:

          猜你喜欢
          • 2013-04-10
          • 1970-01-01
          • 2020-10-27
          • 1970-01-01
          • 2018-12-02
          • 1970-01-01
          • 2010-10-01
          • 2015-06-22
          • 1970-01-01
          相关资源
          最近更新 更多