Вы можете отправить процессам на другом узле так же, как и с процессом, локальным на тот же узел. Трюк, конечно же, должен иметь идентификатор процесса. Но вы также можете отправить процесс, зарегистрированный на другом узле, используя кортеж {RegisteredName, NodeName}, например.
register(a, self()), {a, node()} ! foo.
выслать сообщение сам себе. Этот же синтаксис работает через узлы.
Более сложный пример
В первой оболочки:
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
Во второй оболочки:
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>
И снова в первой оболочки:
([email protected])2> flush().
Shell got good_day
ok
Может Я использую "!" отправить сообщение в далекий узел, если у меня есть Pid процесса на этом узле с помощью функции «spawn (Node, Module, Fun, Args)»? –
Да, отправка удаленных сообщений так же, как отправка локальных –
Вам нужно только убедиться, что все узлы используют тот же файл cookie. – Kaos