erl node啓動方法
short name:
- erl -sname Name
- erl -sname Name@ShortHost
longname:
- erl -name Name
- erl -name Name@ShortHost
- erl -name Name@FullHost
說明:
Name :: atom() || string() ShortHost :: atom() || string(), 不可含有"."。比如"myhost" FullHost :: [ShortHost()] || Ip, 比如"test.mydomain.com"和"8.34.135.3"
short name 和 long name主要爲格式上的區別,long name中Host如果爲域名,需要進行DNS解析。
我們也可以在hosts中添加類似:
ip ShotHost
的Entry使shortname name節點支持其他主機(請參考後面介紹)
Note
注意,shot name的節點和long name的節點不能互相通信。
示例
short name:
假設本機/etc/hosts配置爲:8.27.86.135 da6600.fb.joyent.us
erl -sname cheng % 啓動了一個名叫:cheng@da6600 的Node
erl -name cheng % 啓動了一個名叫:[email protected] 的Node
如果我們的本機hosts配置中,沒有指定域名,那麼需要我們指定Host:
erl -sname cheng@da6600 % 啓動了一個名叫:cheng@da6600的Node
long name:
erl -name cheng@da6600
erl -name [email protected]
erl -name [email protected]
請注意,此3個longname Node是同一個Node
應用
很多資料中,當進行分佈式程序開發時,需要經歷下面的步驟
- 本機單個節點進行測試,
- 本機多個節點進行測試,
- 多臺主機進行接近真實環境的測試
其中第2步,常常是使用 erl -sname Name 類似的方法,產生Node, 因此我們印象中,好像sname只能是在本機的情況下使用?
通常情況下,shortname是限於本機的多個節點,longname可以跨越多臺主機(通過IP,DNS解析)。
當然我們也可以像使用long name Node一樣,使用short name Node。不同的是long name可以通過DNS進行解析, 而short name必須手動的在hosts中添加對應的映射。這樣做的目的就是將本地的請求轉發到目標的主機。
好了讓我們使用short name來試驗一下
server1(ip:8.27.86.135)
啓動node:
erl -sname foo@server1
server2(server2也可以在內網當中,此時鏈接只能由server2發起)
/etc/hosts中添加:
8.27.86.135 server1
隨後啓動node:
erl -sname bar > net_kernel:connect_node('foo@server1'). true > nodes(). > [foo@server1]
這樣,兩個節點就已經鏈接了。
同理,我們也可以在server1中添加一個條目,爲server2其一個ShortName,隨後連接它。
到此,對於short name, long name的使用應該比較清晰了。