作为新手,使用gen_server编写玩具匹配(交易)引擎。
一旦发生交易/匹配,就需要通知两个客户。
文档说:
reply(Client, Reply) -> Result
类型:
Client - see below Reply = term() Result = term()
gen_server可以使用此函数显式发送回复 在回复时,调用
call/2,3
或multi_call/2,3,4
的客户端 无法在Module:handle_call/3
的返回值中定义。客户端必须是提供给回调函数的From参数。 回复是一个任意术语,将返回给 客户端作为
call/2,3
或multi_call/2,3,4
的返回值。返回值Result未进一步定义,应始终为 忽略。
鉴于以上情况,如何向其他客户发送通知。
采取行动的样本
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 ?
答案 0 :(得分:1)
ACK
已已回复。 gen_server:call
合同只接受单个回复。我的意思是,gen_server:call
只会等待一个回复。
通常gen_server:reply
可以像
reply({Pid, Ref}, Result) ->
Pid ! {Ref, Result}.
这意味着如果您尝试发送多个回复,则只需在调用者进程的消息框中获取一些已发送的消息。
相反,我相信,您应该使用一些引用向每个交易发送关联,并在ACK过程期间使用该引用CX_Ref
向呼叫者发送消息。然后,当您必须发送通知时,您只需向{C1_Ref, Payload}
和C1
向C2发送消息{C2_Ref, Payload}
。
此外,您可能需要引入一些监控来处理代理崩溃。