Skip to content

Instantly share code, notes, and snippets.

@MachinesAreUs
Created November 5, 2018 19:55
Show Gist options
  • Save MachinesAreUs/4f3989ff99425f50850d64ffc7080128 to your computer and use it in GitHub Desktop.
Save MachinesAreUs/4f3989ff99425f50850d64ffc7080128 to your computer and use it in GitHub Desktop.
Primeros pasos para hacer un sistema distribuido con Elixir

Sistemas distribuidos con Elixir, primeros pasos

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'

$ iexsname 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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment