Erlang 如何向其他节点发送消息?

Erlang 如何向其他节点发送消息?,erlang,Erlang,我想实现一个简单的聊天室,其中两个节点可以同步地相互发送消息。没有扮演服务器角色的节点 我能用吗要将消息发送到另一个节点,如果我通过spawn(节点、模块、Fun、Args)?的函数在该节点上有进程的pid,您可以发送到另一个节点上的进程,就像您对同一节点的本地进程所做的一样。诀窍当然是你需要进程id,但是你也可以通过元组{RegisteredName,NodeName}发送到另一个节点注册的进程,例如 register(a, self()), {a, node()} ! foo. 将向您自己

我想实现一个简单的聊天室,其中两个节点可以同步地相互发送消息。没有扮演服务器角色的节点


我能用
要将消息发送到另一个节点,如果我通过
spawn(节点、模块、Fun、Args)

的函数在该节点上有进程的pid,您可以发送到另一个节点上的进程,就像您对同一节点的本地进程所做的一样。诀窍当然是你需要进程id,但是你也可以通过元组{RegisteredName,NodeName}发送到另一个节点注册的进程,例如

register(a, self()), {a, node()} ! foo.
将向您自己发送消息。相同的语法适用于节点

更详细的例子

在第一个shell中:

erl -sname one
Erlang R15B01 (erts-5.9.1) [source] [smp:8:8] [async-threads:0] [hipe] [kernel-poll:false]

Eshell V5.9.1  (abort with ^G)
one@grannysmith)1> (one@grannysmith)1> register(hello_server, self()).
(one@grannysmith)2>
true
(one@grannysmith)2> flush().
Shell got good_day
ok
在第二个shell中:

erl -sname two
Erlang R15B01 (erts-5.9.1) [source] [smp:8:8] [async-threads:0] [hipe] [kernel-poll:false]

Eshell V5.9.1  (abort with ^G)
two@grannysmith)1> (one@grannysmith)1> {hello_server, 'one@grannysmith'} ! good_day.
good_day
(two@grannysmith)2>
在第一个外壳中:

erl -sname one
Erlang R15B01 (erts-5.9.1) [source] [smp:8:8] [async-threads:0] [hipe] [kernel-poll:false]

Eshell V5.9.1  (abort with ^G)
one@grannysmith)1> (one@grannysmith)1> register(hello_server, self()).
(one@grannysmith)2>
true
(one@grannysmith)2> flush().
Shell got good_day
ok

如果我通过“spawn(node,Module,Fun,Args)”功能在这个节点上拥有进程的Pid,那么我可以使用“!”向faraway节点发送消息吗?是的,发送远程消息就像发送本地消息一样,您只需要确保所有节点使用相同的cookie。非常感谢!我刚试过这个,效果很好。你能给我一些关于掌握erlang的书籍或网站的信息吗?@skipable.me是一本关于erlang的非常好的在线书籍,还有一个印刷版。否则就去亚马逊看看吧。