Erlang節點short names 和long names

erl node啓動方法

short name:

longname:

說明:

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

應用

很多資料中,當進行分佈式程序開發時,需要經歷下面的步驟

  1. 本機單個節點進行測試,
  2. 本機多個節點進行測試,
  3. 多臺主機進行接近真實環境的測試

其中第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的使用應該比較清晰了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章