在gen_server行为中,如何在具有函数nodes()的节点之间实现广播新闻?

时间:2013-06-05 08:57:30

标签: erlang

我知道如何发送消息,但接收功能让我感到不安。

broadcast(Message) ->
    Nodes  = nodes(),
    gen_server:cast(aname, {broadcast, Message, Nodes}).

handle_cast({broadcast, Message, Nodes}, State) ->
    lists:map(fun(x) -> {aname, X} ! Message end, Nodes).

我应该如何从其他节点接收消息?

3 个答案:

答案 0 :(得分:2)

使用!运算符发送到gen_server进程的消息在handle_info函数中收到:

handle_info(Message, State) ->
    %% do something with Message here
    {noreply, State}.

这与消息是否是从另一个节点发送无关。

答案 1 :(得分:2)

gen_server:cast / 3或gen_server:multi_call / 3

答案 2 :(得分:1)

如果要在不同节点上转换为多个已注册的gen_server:s,请使用gen_server:abcast / 2或gen_server:abcast / 3如果要解决其中一些节点。至于接收,如果您从本地或远程节点获得消息,如果您没有在消息中包含可用于确定发送者的任何内容,则没有可观察到的差异。