iT邦幫忙

2024 iThome 鐵人賽

DAY 26
0
Software Development

Elixir 多工 : Processes 與 OTP系列 第 26

26 跨 node 取得 pid

  • 分享至 

  • xImage
  •  

在 Elixir (erlang) 的 cluster 裡,所有 process 的 pid (地址),預設就是可以在整個 cluster 使用,只要拿到一個 process 的 pid,不管是在同個 node ,或是透過 cluster 連接的另外一台機器都可以直接傳送訊息。

Global registration

要在不同的 node 拿到另一個 node 的 pid,最簡單的方式是使用 erlang 模組 :global 裡面的 register_name 函式

# node 1
iex(node1@localhost)1> :global.register_name("node 1 的 iex", self())
:yes
# node 2
iex(node2@localhost)2> pid = :global.whereis_name("node 1 的 iex")
#PID<13598.114.0>

使用 :global.whereis_name 查詢同個名字便可以得到他的 pid

得到 pid 代表可以傳送訊息

# node 2
iex(node2@localhost)4> send(pid, "hello")
"hello"

在 node 1 使用 iex 提供的 flush 印出信箱內剛剛得到的 "hello"

# node 1
iex(node1@localhost)2> flush
"hello"
:ok

也可以查查看這個 pid 在哪個 node 上

@ node 2
iex(node2@localhost)5> node(pid)
:node1@localhost


上一篇
25 Node (節點)
下一篇
27 Node 監控
系列文
Elixir 多工 : Processes 與 OTP30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言