【发布时间】:2016-08-15 15:05:22
【问题描述】:
据我了解,我应该将handle_cast 用于异步请求,通过发送消息,然后在客户端通过receive..end 响应响应。
这是一个例子:
Pid ! {auth_user, {User, Password}}.
对于同步请求,当我想等待gen_server 发送响应时,我必须从模块中显式调用相应的函数,如下所示:
{ok, Result} = auth_server:auth_user({User, Password}).
上面的陈述是否正确?
如果后者是正确的,如果我已经有一个导出函数auth_user,为什么还需要这样的构造?
handle_call({authenticate_user, {Login, Password}}, _From, _) ->
{reply, {}, {}}.
【问题讨论】:
-
如果你通过
Pid ! {auth_user, {User, Password}}.发送消息,它会触发回调Mod:handle_info({auth_user, {User, Password}}, State) -
除了 dogberts 回答:不幸的是,你必须在 erlang 中学习两个概念,一个是你自己编写 receive..end 循环的语言本身,然后是隐藏这个低级的 OTP 样式来自您的级别层并引入了不同的编程模型(回调),但值得使用,因为它处理了很多边缘情况。
标签: erlang