Erlang分布式節(jié)點(diǎn)中的注冊(cè)進(jìn)程使用實(shí)例
上一篇文章中說到, 注冊(cè)進(jìn)程關(guān)聯(lián)的原子具有全局作用域, 這里的全局指的是當(dāng)前 Erlang 虛擬機(jī), 在分布式中, 便是當(dāng)前分布式節(jié)點(diǎn). 因此, 在一個(gè)節(jié)點(diǎn)中注冊(cè)進(jìn)程關(guān)聯(lián)的原子, 在另一個(gè)節(jié)點(diǎn)中是不能直接使用, 而必須配和目標(biāo)節(jié)點(diǎn)使用.
{RegName, Node} ! {messages}.
例子
先啟動(dòng)一個(gè) Server 節(jié)點(diǎn)
erl -sname server
然后在 Erlang Shell 中操作
先簡單介紹幾個(gè)常用函數(shù)
% 查看當(dāng)前節(jié)點(diǎn)
node().
% => 'server@Gentoo-PC'
% 查看所有已連接的節(jié)點(diǎn)
nodes().
% => [] % 此時(shí)還未連接其它節(jié)點(diǎn)
% 查看當(dāng)前節(jié)點(diǎn)是否存活
is_alive().
% => true
然后進(jìn)入正題
% 啟動(dòng)上一篇文章中最后的那個(gè)程序
test:start().
% Waiting for new message.
% => true
% 當(dāng)前節(jié)點(diǎn)可以使用 testp 原子
testp ! message.
% New message: message
% Waiting for new message.
% => message
然后啟動(dòng)另外一個(gè) Client 節(jié)點(diǎn)
erl -sname client
在新的 Erlang Shell 中
nodes().
% => [] % 此時(shí)未連接節(jié)點(diǎn)
% 當(dāng)前節(jié)點(diǎn)無法直接使用這個(gè)原子的
testp ! {}.
% ** exception error: bad argument
% in operator !/2
% called as testp ! {}
% 需要配合目標(biāo)節(jié)點(diǎn)一起使用
{testp, 'server@Gentoo-PC'} ! {}.
% => {} % 語句返回值
此時(shí), server 節(jié)點(diǎn)就會(huì)接收到消息, 并打印出
% New message: {}
% Waiting for new message.
節(jié)點(diǎn)間首次連接后, 兩個(gè)節(jié)點(diǎn)將會(huì)保持連接
在 Client 節(jié)點(diǎn)中
nodes().
% => ['server@Gentoo-PC']
在 Server 節(jié)點(diǎn)中
nodes().
% => ['client@Gentoo-PC']
結(jié)尾
當(dāng)然, 這只是個(gè)方法, 由于在模塊中定義了 call 函數(shù)包裹了起來, 所以可以使用遠(yuǎn)程調(diào)用, 調(diào)用 Server 節(jié)點(diǎn)上的 test:call 方法.
可以使用 rpc 模塊中的 call/4 方法遠(yuǎn)程調(diào)用函數(shù)
% 在 Node 節(jié)點(diǎn)上執(zhí)行 apply(Module, Function, Args)
% 調(diào)用成功時(shí)返回 Result, 調(diào)用失敗時(shí)返回 {badrpc, Reason}
-spec rpc:call(Node, Module, Function, Args} -> Result | {badrpc, Reason}
在 Client 節(jié)點(diǎn)中
rpc:call('server@Gentoo-PC', test, call, ['message from other node']).
相關(guān)文章
Erlang實(shí)現(xiàn)的百度云推送Android服務(wù)端實(shí)例
這篇文章主要介紹了Erlang實(shí)現(xiàn)的百度云推送Android服務(wù)端實(shí)例,本文先是講解了實(shí)現(xiàn)步驟,然后給出實(shí)現(xiàn)代碼,需要的朋友可以參考下2015-01-01Erlang中執(zhí)行l(wèi)inux命令的兩種方法
這篇文章主要介紹了Erlang中執(zhí)行l(wèi)inux命令的兩種方法,本文著重講解了erlang:open_port的使用,需要的朋友可以參考下2015-01-01Erlang中的注冊(cè)進(jìn)程使用實(shí)例
這篇文章主要介紹了Erlang中的注冊(cè)進(jìn)程使用實(shí)例,本文給出正常進(jìn)程通信實(shí)例和使用使用注冊(cè)進(jìn)程通信實(shí)例,需要的朋友可以參考下2015-02-02Erlang初學(xué):Erlang的一些特點(diǎn)和個(gè)人理解總結(jié)
這篇文章主要介紹了Erlang初學(xué):Erlang的一些特點(diǎn)和個(gè)人理解總結(jié),本文總結(jié)了函數(shù)式編程、一切都是常量、輕量進(jìn)程、進(jìn)程端口映射及典型缺點(diǎn)等內(nèi)容,需要的朋友可以參考下2015-02-02