Można wysyłać do procesów w innym węźle, tak samo jak w przypadku procesu lokalnego do tego samego węzła. Sztuczka polega oczywiście na tym, że musisz mieć identyfikator procesu. Ale można również wysłać do procesu zarejestrowanego w innym węźle za pomocą krotki {RegisteredName, NodeName}, np.
register(a, self()), {a, node()} ! foo.
wyśle wiadomość do Ciebie. Ta sama składnia działa na wszystkich węzłach.
Bardziej skomplikowany przykład
W pierwszej powłoce:
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
W drugiej powłoce:
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>
I znowu w pierwszej powłoce:
([email protected])2> flush().
Shell got good_day
ok
Can Używam "!" wysłać wiadomość do odległego węzła, jeśli mam Pid procesu na tym węźle przez funkcję "spawn (Węzeł, moduł, zabawa, Args)"? –
Tak, wysyłanie zdalnych wiadomości jest tak samo jak wysyłanie lokalnych –
Musisz tylko upewnić się, że wszystkie węzły używają tego samego pliku cookie. – Kaos