私は、2つのノードが互いに同期してメッセージを送信できる単純なチャットルームを実装したいと考えています。サーバーの役割を果たすノードはありません。メッセージを別のノードに送信するにはどうすればよいですか?
このノード上のプロセスのPIDがspawn(Node,Module,Fun,Args)
の場合、!
を使用してメッセージを別のノードに送信できますか?
私は、2つのノードが互いに同期してメッセージを送信できる単純なチャットルームを実装したいと考えています。サーバーの役割を果たすノードはありません。メッセージを別のノードに送信するにはどうすればよいですか?
このノード上のプロセスのPIDがspawn(Node,Module,Fun,Args)
の場合、!
を使用してメッセージを別のノードに送信できますか?
同じノードのローカルプロセスと同じように、別のノードのプロセスに送信することができます。そのトリックはもちろん、プロセス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
ありがとう!私はちょうどこれを試みた、それはうまくいった。あなたは私に書籍やウェブサイトのような情報を与えて、erlangをマスターしてもらえますか? –
@ Despicable.Me http://learnyousomeerlang.com/はErlangの非常に良いオンラインブックで、印刷版もあります。それ以外の場合は、Amazonをチェックしてください。 – rvirding
缶私が使う "!"遠方のノードにメッセージを送るには、もし私がこのノード上で "spawn(Node、Module、Fun、Args)"関数でPidを持っていたら? –
はい、リモートメッセージを送信することは、ローカルメッセージを送信することと同じです –
すべてのノードが同じCookieを使用することを確認する必要があります。 – Kaos