iT邦幫忙

2024 iThome 鐵人賽

DAY 25
0

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]

在 node1 執行 node2 才有的函式

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

上一篇
24 DynamicSupervisor 搭配 Registry
下一篇
26 跨 node 取得 pid
系列文
Elixir 多工 : Processes 與 OTP30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言