2013-06-04 10 views
6

私は、2つのノードが互いに同期してメッセージを送信できる単純なチャットルームを実装したいと考えています。サーバーの役割を果たすノードはありません。メッセージを別のノードに送信するにはどうすればよいですか?

このノード上のプロセスのPIDがspawn(Node,Module,Fun,Args)の場合、!を使用してメッセージを別のノードに送信できますか?

+0

缶私が使う "!"遠方のノードにメッセージを送るには、もし私がこのノード上で "spawn(Node、Module、Fun、Args)"関数でPidを持っていたら? –

+1

はい、リモートメッセージを送信することは、ローカルメッセージを送信することと同じです –

+0

すべてのノードが同じCookieを使用することを確認する必要があります。 – Kaos

答えて

13

同じノードのローカルプロセスと同じように、別のノードのプロセスに送信することができます。そのトリックはもちろん、プロセスIDを持つ必要があります。しかし、タプル{RegisteredName、NodeName}を使用して別のノードに登録されたプロセスに送信することもできます。

register(a, self()), {a, node()} ! foo. 

あなた自身にメッセージを送信します。同じ構文はノード間で機能します。最初のシェルで

Aより精巧な例

:第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) 
[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

ありがとう!私はちょうどこれを試みた、それはうまくいった。あなたは私に書籍やウェブサイトのような情報を与えて、erlangをマスターしてもらえますか? –

+4

@ Despicable.Me http://learnyousomeerlang.com/はErlangの非常に良いオンラインブックで、印刷版もあります。それ以外の場合は、Amazonをチェックしてください。 – rvirding

関連する問題