Erlang分布式消息发送-元组中第一个原子的含义是什么?
Erlang将 8.9发送 将Erlang分布式消息发送-元组中第一个原子的含义是什么?,erlang,Erlang,Erlang将 8.9发送 将Expr2的值作为消息发送到指定的进程 Expr1。Expr2的值也是 表情 Expr1必须计算为pid、注册名(atom)或元组 {Name,Node}Name是一个原子,Node是一个节点名,也是一个 原子 如果Expr1计算为名称,但未注册该名称,则会发生badarg运行时错误 向pid发送消息永远不会失败,即使pid标识了不存在的进程 分布式消息发送,也就是说,如果Expr1的计算结果为元组{Name,Node}(或位于另一个节点的pid),则也不会 失败
Expr2
的值作为消息发送到指定的进程
Expr1
。Expr2
的值也是
表情
Expr1
必须计算为pid、注册名(atom)或元组
{Name,Node}
Name
是一个原子,Node
是一个节点名,也是一个
原子
- 如果
计算为名称,但未注册该名称,则会发生Expr1
运行时错误badarg
- 向pid发送消息永远不会失败,即使pid标识了不存在的进程
- 分布式消息发送,也就是说,如果
的计算结果为元组Expr1
(或位于另一个节点的pid),则也不会 失败了{Name,Node}
{Name,Node}
中代表什么
非常感谢您的帮助。您引用的句子语法有点含糊不清。这三种选择是:
- 进程ID是从某些Erlang函数返回的不透明数据类型,主要是spawn和spawn_链接
- 本地节点(即本地VM)上的注册名称。需要这样做的一个例子是长时间运行的服务器应用程序,您希望进程能够与密钥实用程序服务(如DNS缓存)通信
- 一个元组,包含注册名称及其所在节点的名称(如果是另一个VM,则可能位于不同的主机上)
假设您有两个节点: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!".