正好趁著放假,拿出以前的東西好好玩玩,今天又回顧了一遍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 上的一把分布式鎖,就是可以去建...