È possibile inviare a processi su un altro nodo esattamente come con un processo locale sullo stesso nodo. Il trucco è ovviamente che devi avere l'id di processo. Ma puoi anche inviare a un processo registrato su un altro nodo usando la tupla {RegisteredName, NodeName}, ad es.
register(a, self()), {a, node()} ! foo.
invierà un messaggio a te stesso.La stessa sintassi funziona tra i nodi.
un più elaborato esempio
Nel primo guscio:
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)
[email protected])1> ([email protected])1> register(hello_server, self()).
([email protected])2>
true
Nella seconda 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)
[email protected])1> ([email protected])1> {hello_server, '[email protected]'} ! good_day.
good_day
([email protected])2>
E ancora nel primo guscio:
([email protected])2> flush().
Shell got good_day
ok
fonte
2013-06-04 09:07:04
Can Io uso "!" per inviare un messaggio al nodo lontano, se ho il Pid del processo su questo nodo per funzione di "spawn (Node, Module, Fun, Args)"? –
Sì, l'invio di messaggi remoti è proprio come l'invio di quelli locali –
È necessario solo accertarsi che tutti i nodi utilizzino lo stesso cookie. – Kaos