2013-06-04 16 views
6

Voglio implementare una semplice chat room in cui due nodi possono inviare messaggi tra loro sincroni. Non c'è un nodo che svolge un ruolo di server.Come posso inviare un messaggio a un altro nodo?

Posso usare ! per inviare un messaggio a un altro nodo, se ho il pid del processo su questo nodo per funzione di spawn(Node,Module,Fun,Args)?

+0

Can Io uso "!" per inviare un messaggio al nodo lontano, se ho il Pid del processo su questo nodo per funzione di "spawn (Node, Module, Fun, Args)"? –

+1

Sì, l'invio di messaggi remoti è proprio come l'invio di quelli locali –

+0

È necessario solo accertarsi che tutti i nodi utilizzino lo stesso cookie. – Kaos

risposta

13

È possibile inviare a processi su un altro nodo esattamente come con un processo locale sullo stesso nodo. Il trucco è ovviamente che devi avere l'id di processo. Ma puoi anche inviare a un processo registrato su un altro nodo usando la tupla {RegisteredName, NodeName}, ad es.

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

invierà un messaggio a te stesso.La stessa sintassi funziona tra i nodi.

un più elaborato esempio

Nel primo guscio:

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 

Nella seconda shell:

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> 

E ancora nel primo guscio:

([email protected])2> flush(). 
Shell got good_day 
ok 
+0

Grazie mille! Ho appena provato questo, ha funzionato bene. Mi darai per favore alcune informazioni come libri o siti web per padroneggiare l'erlang? –

+4

@ Despicable.Me http://learnyousomeerlang.com/ è un ottimo libro online su Erlang, esiste anche una versione stampata. Altrimenti controlla su Amazon. – rvirding

Problemi correlati