我对分布式邮件发送和发送操作员有疑问。 erlang User's Guide将发送操作符描述为
Expr1 ! Expr2
并解释了Expr1是两个原子的元组的情况,第二个表示节点名称,但我不清楚第一个原子代表远程节点或进程的代码。
感谢您的帮助。
答案 0 :(得分:6)
在你引用的句子中,语法有点含糊不清。这三个选项是:
第一种是迄今为止最常见的。注册名称应谨慎使用。
我建议从Learn Your Some Erlang的并发章节开始,并根据需要回溯到前面的章节: http://learnyousomeerlang.com/the-hitchhikers-guide-to-concurrency#dont-panic
答案 1 :(得分:3)
假设你有两个节点:node1 @ localhost和node2 @ localhost,你在node1中将一个erlang进程注册为process1。
您可以将node2中的消息发送到node1中的process1:
{process1, node1@localhost} ! yourmessage.
希望这会有所帮助
答案 2 :(得分:1)
在这个表达式中:
Expr1!表达式2
Expr1 必须评估为(1) a pid ,(2)注册名称(原子)或(3)元组{Name,Node} 。
在第三种情况下,如您所知,当Expr1评估为元组{Name,Node} 时,Name是进程的注册名称(atom),Node是节点名称(也是一个原子),如 name @ server 。
例如:
% ------- in your node -------
(you@server)> register(shell, self()).
% ------- in my node -------
(me@server)> {shell, you@server} ! "hey you!".
请注意,在将消息发送到其他节点中的其他进程之前,首先必须连接到它们。例如, spawn(节点,模块,函数,参数)或 net_adm:ping(节点)。
出于测试目的,使用 nodes()功能列出已连接的节点。