Elixir 與 erlang OTP 天生就有讓我們組成 cluster 的功能,
這篇我們會將兩個終端機的 iex
連接起來,並互相傳遞訊息
使用 iex 的同時加上 --sname
選項
# 開啟 node 1
iex --sname node1@localhost
# 在另一個終端機 開啟 node 2
iex --sname node2@localhost
接著在 node 1 連接 node 2
# node 1 iex 內
iex(node1@localhost)1> Node.connect(:node2@localhost)
true
這時可以用 Node.list
來看目前有哪些連線,可以看到已經有 node2 了
iex(node1@localhost)2> Node.list
[:node2@localhost]
在 node2 的終端機也可以用 Node.list 發現 node1
# node 2 iex
iex(node2@localhost)1> Node.list
[:node1@localhost]
Node 之間甚至可以不需要是一樣的程式
在 node2 中建立一個 module
iex(node2@localhost)5> defmodule Node2 do
...(node2@localhost)5> def hello do
...(node2@localhost)5> IO.puts "這裡是 Node2"
...(node2@localhost)5> end
...(node2@localhost)5> end
接著在 node1 使用 Node.spawn_link
來呼叫
iex(node1@localhost)5> Node.spawn_link(:node2@localhost, fn -> Node2.hello end)
#PID<14074.129.0>
這裡是 Node2