最近做乙個遊戲跨服功能。其實對erlang來說,天生支援分布式,理論上不會有太大難題,就是一兩個問題比較頭疼。
問題大致是這樣,當乙個節點a被啟動起來後,另乙個節點b啟動,b啟動完之後,a、b節點之間忽然就自動連線了,沒有ping,沒有net_kernel:connect這些操作,但是他們就連線起來了。查詢問題,始終得不到解決,後來朋友提醒,erlang只要是向遠端節點傳送訊息,或者erlang:monitor(process, pid)都會自動去連線遠端節點。可是,後來我怎麼查詢**,也沒有看到有向遠端pid傳送訊息的**(可能查的不夠)。算了,既然查不到,就放在一邊,先把問題解決。
解決方法之一就是把節點設定為hidden,這個可以在啟動引數那裡定。但是設定為hidden就有一些新問題了,比如說,a節點註冊了乙個global的pid,如果不是hidden,那麼和他相連的節點b,global:whereis_name就能得到這個pid,在hidden的情況下,這樣是不行的。換個思路,其實只要有pid就行了,global:whereis_name無非就是想拿到pid,既然這樣,a、b節點連通的時候,互相把需要用到的pid交換就行了,所以,我在節點連通之後,用rpc:call給兩個節點互相交換pid和name,這樣就解決了。
關於節點連線,傳送門
關於net_kernel,傳送門 ;
多點分布式Erlang簡單實驗
正好趁著放假,拿出以前的東西好好玩玩,今天又回顧了一遍erlang裡啟動多個結點的過程,記錄在此。首先,啟動兩個點,foo 跟bar 命令 erl sname foo setcookie erlang erl sname bar setcookie erlang 測試兩點連通 net adm pin...
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賬號操作,分別在兩台機子上執行以...