2013-06-04 2 views
6

Я хочу реализовать простую комнату чата, в которой два узла могут отправлять сообщения друг другу синхронно. Не существует узла, который играет роль сервера.Как отправить сообщение другому узлу?

Могу ли я использовать ! для отправки сообщения другому узлу, если у меня есть pid процесса на этом узле по функциям spawn(Node,Module,Fun,Args)?

+0

Может Я использую "!" отправить сообщение в далекий узел, если у меня есть Pid процесса на этом узле с помощью функции «spawn (Node, Module, Fun, Args)»? –

+1

Да, отправка удаленных сообщений так же, как отправка локальных –

+0

Вам нужно только убедиться, что все узлы используют тот же файл cookie. – Kaos

ответ

13

Вы можете отправить процессам на другом узле так же, как и с процессом, локальным на тот же узел. Трюк, конечно же, должен иметь идентификатор процесса. Но вы также можете отправить процесс, зарегистрированный на другом узле, используя кортеж {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 
+0

Большое спасибо! Я просто пробовал это, он работал хорошо. Не могли бы вы дать мне некоторую информацию, например, книги или веб-сайты для изучения эрланга? –

+4

@ Despicable.Me http://learnyousomeerlang.com/ - очень хорошая онлайн-книга о Erlang, есть также печатная версия. В противном случае просто проверьте Amazon. – rvirding

Смежные вопросы