檢視原始碼 如何為 Erlang 分散式系統實作替代節點探索機制
本節說明如何為 Erlang 分散式系統實作替代節點探索機制。節點探索通常使用 DNS 和 Erlang Port Mapper Daemon (EPMD) 來進行埠註冊和查詢。
注意
Erlang/OTP 21 新增了對替代節點探索機制的支援。
簡介
要實作您自己的節點探索模組,您必須編寫自己的 EPMD 模組。 EPMD 模組 負責提供另一個節點的位置。分散式模組(inet_tcp_dist
/inet_tls_dist
)會呼叫 EPMD 模組以取得另一個節點的 IP 位址和埠。Erlang/OTP 內建的 EPMD 模組會使用 DNS 解析主機名稱,並使用 EPMD Unix 程序來取得另一個節點的埠。EPMD Unix 程序會連線到另一個節點的已知埠 (埠 4369) 來完成此操作。
探索模組
探索模組需要實作與正規 EPMD 模組 相同的 API。但是,您可以連線到任何服務,而不是與 EPMD 通訊,以找出其他節點的連線詳細資訊。透過在啟動 erlang 時設定 -epmd_module 來啟用探索模組。探索模組必須實作下列回呼函數:
start_link/0 - 啟動探索模組所需的任何程序。
names/1 - 傳回註冊器針對指定主機所持有的節點名稱。
register_node/2 - 向註冊器註冊指定的節點名稱。
port_please/3 - 傳回指定節點所使用的分散式埠。
探索模組可以實作下列回呼函數:
address_please/3 - 傳回指定節點的位址。如果未實作,則將改用
erl_epmd:address_please/3
。這個回呼函數也可以傳回指定節點的埠。在這種情況下,可以省略 port_please/3。
listen_port_please/2 - 傳回本機節點應該接聽的埠。如果未實作,則將改用
erl_epmd:listen_port_please/2
。