Erlang分布式消息发送-元组中第一个原子的含义是什么?

Erlang分布式消息发送-元组中第一个原子的含义是什么?,erlang,Erlang,Erlang将 8.9发送 将Expr2的值作为消息发送到指定的进程 Expr1。Expr2的值也是 表情 Expr1必须计算为pid、注册名(atom)或元组 {Name,Node}Name是一个原子,Node是一个节点名,也是一个 原子 如果Expr1计算为名称,但未注册该名称,则会发生badarg运行时错误 向pid发送消息永远不会失败,即使pid标识了不存在的进程 分布式消息发送,也就是说,如果Expr1的计算结果为元组{Name,Node}(或位于另一个节点的pid),则也不会 失败

Erlang将

8.9发送 将
Expr2
的值作为消息发送到指定的进程
Expr1
Expr2
的值也是 表情

Expr1
必须计算为pid、注册名(atom)或元组
{Name,Node}
Name
是一个原子,
Node
是一个节点名,也是一个 原子

  • 如果
    Expr1
    计算为名称,但未注册该名称,则会发生
    badarg
    运行时错误
  • 向pid发送消息永远不会失败,即使pid标识了不存在的进程
  • 分布式消息发送,也就是说,如果
    Expr1
    的计算结果为元组
    {Name,Node}
    (或位于另一个节点的pid),则也不会 失败了
在分布式消息发送的情况下,我不清楚远程节点或进程的代码中第一个原子在
{Name,Node}
中代表什么


非常感谢您的帮助。

您引用的句子语法有点含糊不清。这三种选择是:

  • 进程ID是从某些Erlang函数返回的不透明数据类型,主要是spawn和spawn_链接
  • 本地节点(即本地VM)上的注册名称。需要这样做的一个例子是长时间运行的服务器应用程序,您希望进程能够与密钥实用程序服务(如DNS缓存)通信
  • 一个元组,包含注册名称及其所在节点的名称(如果是另一个VM,则可能位于不同的主机上)
第一种是目前最常见的。注册名称应谨慎使用

我建议从“了解一些Erlang”中的并发章节开始,并根据需要回溯到前面的章节:
假设您有两个节点:node1@localhost及node2@localhost然后在node1中将一个erlang进程注册为process1

您可以通过以下方式将消息从node2发送到node1中的process1:

{process1, node1@localhost} ! yourmessage.
希望这将有助于此表达:

Expr1!Expr2

Expr1必须计算为(1)一个pid,(2)一个注册名称(原子)或(3)一个元组{name,Node}

在第三种情况下,正如您想知道的,当Expr1计算为元组{Name,Node}时,Name是进程的注册名(atom),Node是节点名(也是atom),如name@server.

例如:

% ------- in your node -------
(you@server)> register(shell, self()).

% ------- in my node -------
(me@server)> {shell, you@server} ! "hey you!".
请注意,在将消息发送到其他节点中的其他进程之前,首先必须连接到它们。例如,使用spawn(节点、模块、函数、参数)net\u adm:ping(节点)

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

% ------- in your node -------
(you@server)> register(shell, self()).

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