gpt4 book ai didi

erlang - 如何在 Erlang gen_server 中使用handle_cast和handle_call?

转载 作者:行者123 更新时间:2023-12-02 04:07:07 26 4
gpt4 key购买 nike

据我了解,我应该通过发送消息使用 handle_cast 进行异步请求,然后通过客户端的 receive..end 对响应使用react。

这是一个例子:

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, {}, {}}.

最佳答案

您不会通过像这样直接发送消息来与 gen_server 进行交互。您应该像这样使用 gen_server:callgen_server:cast:

Response = gen_server:call(Pid, {auth_user, {User, Password}})

call/cast 将处理向 Pid 发送消息(并接收 call 的响应)本身,以及许多边缘情况,例如在响应您的请求之前进程崩溃等。

If the latter is correct, why then I need a construction like this if I already have an exported function auth_user?

当您想要在多个调用之间存储某些状态时,

gen_server 非常有用。例如,如果您想在内存中保留应用中页面浏览量的全局计数器,则应使用 gen_server,将计数器存储为 的状态并进行 cast 或在每次请求时调用。如果没有要保留的状态,则应该使用普通函数。

关于erlang - 如何在 Erlang gen_server 中使用handle_cast和handle_call?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38950561/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com