在Erlang虛擬機(beam或beam.smp)之間進行身份驗證。 epmd只處理端口註冊。簡單地將epmd短路並非易事,其他方法可能更適合您的實際需要。
不幸的是,epmd不適用於默認分配協議(inet_tcp_dist
)或其SSL counterpart。有兩個未公開的選項,看起來像可以禁用epmd(-no_epmd
)或提供替代實施(epmd_module
)。但是,分發協議對epmd的依賴性是hard-coded,並且不依賴於這些選項。
所以,你可以:
- 覆蓋在代碼服務器級別(可能是最髒的方法)的
erl_epmd
模塊;
- 提供了一個可選的分發協議,除了調用erl_epmd的部分之外,它將複製(或調用)
inet_tcp_dist
。主要是,您需要提供您自己的setup/5
的實現。
如果您不希望shell節點連接到epmd以註冊其名稱,則還需要覆蓋listen/1
。在這種情況下,您可以將-no_epmd
傳遞到命令行。
備選地,可以連接到EPMD爲了創建使用默認協議的殼連接以註冊監聽節點。
如果epmd丟失了一個節點的路徑(例如它被殺死,不幸的是epmd是單點故障),該方法特別有用。爲此,請執行以下操作:
- 創建到epmd的TCP連接併發送數據包,以使用其已知的端口和名稱註冊丟失的節點。保持打開TCP連接或epmd將取消註冊節點。
- 使用上一步中使用的名稱將新的外殼連接到丟失的節點。
- 然後,您可以關閉在(1)中建立的連接,並通過調用
erl_epmd:register_node/2
(並根據需要發送精心製作的tcp_closed
消息)最終將丟失的節點重新註冊到epmd。
謝謝保羅,這是非常有幫助的。 –