Crear un nodo llamado 'node1'
$ iex —sname node1
Dentro de iex
, crear el módulo para el server
iex(node1@zensoft)1> defmodule GreetServer do
...(node1@zensoft)1> def greet_loop do
...(node1@zensoft)1> receive do
...(node1@zensoft)1> {:greet, pid} ->
...(node1@zensoft)1> IO.puts "Hello #{inspect pid}! from #{inspect self()}
...(node1@zensoft)1> _ ->
...(node1@zensoft)1> IO.puts "uh?"
...(node1@zensoft)1> end
...(node1@zensoft)1> greet_loop()
...(node1@zensoft)1> end
...(node1@zensoft)1> end
Crear un proceso que ejecute el código
iex(node1@zensoft)3> pid = spawn GreetServer, :greet_loop, []
#PID<0.128.0>
Enviar mensajes al proceso local
iex(node1@zensoft)4> send pid, "hola"
uh?
"hola"
iex(node1@zensoft)5> send pid, {:greet, self()}
Hello #PID<0.110.0>! from #PID<0.128.0>
{:greet, #PID<0.110.0>}
En otra terminal, crear otro nodo llamado 'node2'
$ iex —sname node2
Comprobar que los nodos no se conocen
iex(node2@zensoft)1> Node.list
[]
Conectar los nodos
iex(node2@zensoft)2> Node.connect :node1@zensoft
true
iex(node2@zensoft)3> Node.list
[:node1@zensoft]
Registrar de manera global el proceso en el 1er nodo
iex(node1@zensoft)7> Process.register pid, MyFancyGreetServer
true
Llamar al proceso desde el 2o nodo
iex(node2@zensoft)8> send {MyFancyGreetServer, :node1@zensoft}, {:greet, self()}
{:greet, #PID<0.110.0>}
en el 1er nodo debe aparecer algo como
Hello #PID<14419.110.0>! from #PID<0.128.0>