Erlang gen_server通讯 [英] Erlang gen_server communication
本文介绍了Erlang gen_server通讯的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如果我有多个服务器实例,如何将信息从一个服务器传递到另一个服务器,例如:
If I have several instances of server, how can I pass info from one to another, for example:
我有这个:
...
-record(id,{name,hash}).
-record(state, {id ,m, succ, pred}).
start(Name, M) ->
gen_server:start_link({local, Name}, ?MODULE, {new_ring, Name, M}, []).
join_ring(Name, Other) ->
gen_server:start_link({local, Name}, ?MODULE, {join_ring, Name, Other}, []).
...
init({new_ring, Name, M}) ->
Me=#id{name=Name,hash=M}
{ok, #state{
id = Me,
m = M,
succ = Me,
pred = nil,
}};
init({join_ring, Name, Other}) ->
Me=#id{name=Name,hash=M}
{ok, #state{
id = Me,
m = Other,
succ = Me,
pred = nil,
}}.
假设我有两台服务器,一台和两台.如何从服务器2的状态访问服务器的信息?
Let say that I have two servers, one and two. How can I access from the server one info from the state of server two?
推荐答案
-module(wy).
-compile(export_all).
-export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]).
-behaviour(gen_server).
-record(state, {id ,m, succ, pred}).
start(Name, M) ->
gen_server:start_link({local, Name}, ?MODULE, [Name, M], []).
init([Name, M]) ->
{ok, #state{id = Name, m = M}}.
handle_call({get_server_info}, _Frome, State) ->
{reply, State, State};
handle_call(_Request, _From, State) ->
Reply = ok,
{reply, Reply, State}.
handle_cast(_Msg, State) ->
{noreply, State}.
handle_info(_Info, State) ->
{noreply, State}.
terminate(_Reason, _State) ->
ok.
code_change(_OldVsn, State, _Extra) ->
{ok, State}.
get_server_info(ServerName) ->
gen_server:call(ServerName, {get_server_info}).
我认为您可以参考此代码示例.
您可以为服务器命名,例如server1
& server2
.
然后,您使用gen_server:call/2
将消息发送到所需的服务器.
I think you can refer this code sampe.
You can give the server a name, for example server1
& server2
.
Then you use gen_server:call/2
to send the message to the server you wanted.
只需启动两个gen_serber:
just start two gen_serber:
4> wy:start(server1, server1).
{ok,<0.50.0>}
5> wy:start(server2, server2).
{ok,<0.52.0>}
要从服务器获取状态信息:
To get the state info from the server:
24> wy:get_server_info(server2).
{state,server2,server2,undefined,undefined}
25> wy:get_server_info(server1).
{state,server1,server1,undefined,undefined}
这篇关于Erlang gen_server通讯的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文