erlang分布式入門(一) ping pong

2022-09-15 11:39:10 字數 1610 閱讀 6424

測試環境和 一樣,192.168.0.182(centos-182)和192.168.0.183(centos-183),

1.按照上面鏈結(步驟1-4)設定通過ssh hostname 免輸入密碼直接登入。

2.設定erlang的magiccookie,由於都是以root賬號操作,分別在兩台機子上執行以下命令

cd /root

vi .erlang.cookie 

輸入shell**  

centos_erlang  

:wq 退出儲存

chmod 400 .erlang.cookie,linux下需要使用者對magiccookie有讀許可權

4.ping-pong測試**,**自網上erlang教程,tut17.erl

erlang**  

-module(tut17).  

-export([start_ping/1, start_pong/0,  ping/2, pong/0]).  

ping(0, pong_node) ->  

! finished,  

io:format("ping finished~n", );  

ping(n, pong_node) ->  

! ,  

receive  

pong ->  

io:format("ping received pong~n", )  

end,  

ping(n - 1, pong_node).  

pong() ->  

receive  

finished ->  

io:format("pong finished~n", );  

->  

io:format("pong received ping~n", ),  

ping_pid ! pong,  

pong()  

end.  

start_pong() ->  

register(pong, spawn(tut17, pong, )).  

start_ping(pong_node) ->  

spawn(tut17, ping, [3, pong_node]).  

5.在centos-183上執行erl -sname 'pong' ,啟動pong節點,進入erl命令列之後輸入 tut17:start_pong().

在centos-182上執行 erl -sname 'ping',啟動ping節點,進入erl命令列之後輸入 tut17:start_ping('pong@centos-183').

命令及輸出見下圖:

注意在ping節點上的erl命令列啟動ping程序的時候如果輸入tut17:start_ping(pong@centos-183). 會報錯如下:

shell**  

** exception error: bad argument in an arithmetic expression  

in operator  -/2  

called as pong@centos - 183  

在參考「莊周夢蝶」的 時就出現這個錯誤,後來在stackoverflow 上找到乙個相關問題  才得以解決!

erlang之分布式程式設計入門

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

多點分布式Erlang簡單實驗

正好趁著放假,拿出以前的東西好好玩玩,今天又回顧了一遍erlang裡啟動多個結點的過程,記錄在此。首先,啟動兩個點,foo 跟bar 命令 erl sname foo setcookie erlang erl sname bar setcookie erlang 測試兩點連通 net adm pin...

分布式 分布式鎖

本質是利用redis的setnx 方法的特性來加鎖,setnx 即key不存在則設定key,否則直接返回false,要求在分布式系統中使用同乙個redis服務,以下提供兩種解決方案 1 直接使用redistemplate 這其實並不能完全保證高併發下的安全問題,因為可能在鎖過期之後該執行緒尚未執行完...