Erlang:gen_服务器-回复两个客户端
作为新手,使用gen_server编写玩具匹配(交易)引擎 一旦交易/匹配发生,需要通知双方客户 文件说: 类型:Erlang:gen_服务器-回复两个客户端,erlang,erlang-ports,Erlang,Erlang Ports,作为新手,使用gen_server编写玩具匹配(交易)引擎 一旦交易/匹配发生,需要通知双方客户 文件说: 类型: Client - see below Reply = term() Result = term() gen_服务器可以使用此函数显式发送回复 当应答时,发送到调用call/2,3或多用户呼叫/2,3,4的客户端 无法在模块:句柄调用/3的返回值中定义 客户端必须是提供给回调函数的From参数。Reply是一个任意术语,将返回给 客户端作为call/2,3或multi\u call
Client - see below
Reply = term()
Result = term()
gen_服务器可以使用此函数显式发送回复
当应答时,发送到调用call/2,3
或多用户呼叫/2,3,4
的客户端
无法在模块:句柄调用/3
的返回值中定义
客户端必须是提供给回调函数的From参数。Reply是一个任意术语,将返回给
客户端作为call/2,3
或multi\u 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
已经是回复。而且,genu服务器:call
contract只接受一次回复。我的意思是,gen_server:call
只会等待一个回复
一般来说,genu服务器:reply
可以像
reply({Pid, Ref}, Result) ->
Pid ! {Ref, Result}.
这意味着,如果您尝试发送多个回复,您只会在调用者进程的消息框中收到一些奇怪的消息
提议
相反,我认为,在确认过程中,您应该发送将每个交易与某个参考关联的消息,并使用该参考CX_Ref
向调用者发送消息。然后,当您必须发送通知时,您只需将消息{C1_-Ref,Payload}
发送到C1
和{C2_-Ref,Payload}
发送到C2
另外,您可能需要引入一些监控来处理经纪人崩溃。Thanx为了澄清,这是否意味着gen_服务器不适合交易引擎,使用另一个gen_*是有意义的,这是推荐的。@CSP,我不是说,gen_服务器不合适,我不是说它是最好的解决方案。我相信你可以从它开始,但你以后可能想改变这个决定。
reply({Pid, Ref}, Result) ->
Pid ! {Ref, Result}.