erlang:gen_server-回复两个客户



作为新手,使用gen_server编写玩具匹配(交易)引擎。

一旦发生交易/匹配,就需要通知两个客户。

文档说:

reply(Client, Reply) -> Result

类型:

Client - see below
Reply = term()
Result = term()

gen_server可以使用此功能明确发送答复 当回复时,给称为call/2,3multi_call/2,3,4的客户端 无法在Module:handle_call/3的返回值中定义。

客户端必须是提供给回调函数的参数。回复是一个任意术语,它将回到 客户端作为call/2,3multi_call/2,3,4的返回值。

返回值结果没有进一步定义,应始终是 被忽略。

给定上述方式如何将通知发送给其他客户。

动作的样本序列

   C1 -> Place order  IBM,BUY,100,10.55
   Server -> Ack C1 for order
   C2 -> Place order  IBM,SELL,100,10.55
      Server -> Ack C2 for order
             -> Trade notification to C2
             -> Trade notification to C1 %% Can I use gen_server:reply() 
                                         %% If yes - How ?

好吧,你不能。您的ACK已经答复。gen_server:call 合同只能接受单个答复。我的意思是,gen_server:call只会等待一个答复。

通常可以像

一样实现gen_server:reply
reply({Pid, Ref}, Result) ->
    Pid ! {Ref, Result}.

这意味着,如果您尝试发送多个答复,则只需在呼叫者过程的消息框中获取一些Weired消息。

建议

我相信,您应该在ACK过程中以该参考CX_Ref发送给呼叫者,并将消息发送给呼叫者。然后,当您必须发送通知时,您只需向C1{C2_Ref, Payload}发出消息{C1_Ref, Payload}

您也可能想引入一些监视以处理经纪人崩溃。

最新更新