多點分布式Erlang簡單實驗

2021-08-25 08:00:08 字數 1123 閱讀 1119

正好趁著放假,拿出以前的東西好好玩玩,今天又回顧了一遍erlang裡啟動多個結點的過程,記錄在此。

首先,啟動兩個點,foo@***跟bar@***,命令:

erl -sname foo -setcookie erlang

erl -sname bar -setcookie erlang

測試兩點連通:

net_adm:ping(bar@***).

這裡開始的時候出錯來著,是由於我的/etc/hosts裡邊我的本機***的ip還是公司的,沒改到家裡的,ip出錯了,那裡自然ping不通。

在兩點聯通了之後,又實驗了一下上次r給我們講課中,提到的就是遠端輸出的問題,執行:

(foo@***)10> rpc:call(bar@***, io, format, ["haha~n"]).

就把haha列印到原地了,而實際系統中,遠端連過去之後,想列印到另一端的話,就得指定那個user的方式,用另外的:

(foo@***)7> rpc:call(bar@***, io, format, [user, "haha~n", ]).

就跑過去了。

這裡完了之後,程式中的要做對應的修改,從單機註冊傳送,改為用global的函式去做:

erlang:register(?server_name, pid) => global:register_name(?server_name, pid)

傳送變成:

?server_name ! msg => global:send(?server_name, msg)

另外就是啟動的時候註冊的問題,可能race情況,所以用global:trans/2去做就好了:

start() ->

global:trans(,

fun() ->

case global:whereis_name(?server_name) of

undefined ->

pid = spawn(...),

global:register_name(?server_name, pid);

_ ->

okend

end).

然後,就好了,可以兩個點上互相有所操作了

erlang之分布式程式設計入門

我們可以看出,我們使用erl sname name的方式建立了2個節點,乙個叫pp,乙個叫faker,然後pp呼叫rpc call 函式呼叫了faker的函式,實現了不同節點的通訊。我們可以看出,我們這裡使用的是 name,而不是 sname,如果我們要在2太不同的電腦上進行2個節點間的通訊應該用 ...

erlang分布式入門(一) ping pong

測試環境和 一樣,192.168.0.182 centos 182 和192.168.0.183 centos 183 1.按照上面鏈結 步驟1 4 設定通過ssh hostname 免輸入密碼直接登入。2.設定erlang的magiccookie,由於都是以root賬號操作,分別在兩台機子上執行以...

簡單聊聊分布式鎖 zookeeper分布式鎖

zookeeper分布式鎖 zookeeper分布式鎖 舉個栗子。對某乙個資料連續發出兩個修改操作,兩台機器同時收到了請求,但是只能一台機器先執行完另外乙個機器再執行。那麼此時就可以使用 zookeeper 分布式鎖,乙個機器接收到了請求之後先獲取 zookeeper 上的一把分布式鎖,就是可以去建...