我正在寻找使用gen_server:cast/2 的Erlang 异步消息处理的好例子.
我在OTP ssh模块中看到了一个示例,该模块通过Module:handle_cast/2接收请求,将其保存在模块的本地队列中,并通过显式发送消息发回与该请求相对应的回复消息给来电者.当我试图阅读它时,我几乎无法跟踪代码,并且无法理解这个想法.
一段伪代码是值得赞赏的.
我相信你指的是ssh_connection_manager模块.
执行a时gen_server:cast/2,请求在Module:handle_cast/2函数中处理.这里有几点需要注意:
handle_cast参数中,您没有关于发件人的信息,因此您不能 - 除非您在邮件本身内发送此信息 - 请将一些结果发回给它.gen_server:cast/2不会等待回复.实际上,它甚至不关心消息是否到达(有一些例外).handle_cast/2,你可以只返回一个noreply或一个停止元组,所以无法在那里返回一个回复.说,你一直在看的代码背后的想法应该是(简化事情):
gen_server:call/2是由此时,您需要两种可能性,具体取决于您是否需要更多信息来计算来自其他客户端(A)或来自同一客户端(B)的结果:
gen_server:call/2.