gen_server 可以接收来自两个不同客户端进程的消息吗?
Can a gen_server receive messages from two different client processes?
我有一个由另一台服务器启动的 gen_server
(my_gen_server.erl
) ejabberd
)
在 my_gen_server.erl
中,我启动了另一个服务器来处理 HTTP2
调用,如下所示:
{ok, ServerPid} = apns:connect(cert, my_first_connection).
现在,my_gen_server
正在接收来自 ejabberd
和 ServerPid
的消息,我按如下方式处理:
1. handle_info({reconnecting, ServerPid}=Msg, State) -> %% do Something
2. handle_info({connection_up, ServerPid}=Msg, State) -> %% do Something
3. handle_info(#offline_msg{...} = _Msg, State) -> %% do Something
因此 1 和 2 由 ServerPid
发送,3 由 ejabberd
发送。这是有效的,但我不确定正确的行为。所以,
我的问题是:
- 对于来自多个客户端进程的 receive/handle 消息,这种
gen_server
行为是否正确?
请帮忙。
任何具有 gen_server 的 pid 的进程都可以使用 !
向 gen_server 发送消息,这将由 gen_server 的函数处理:
handl_info()
任何具有 gen_server 的 pid 的进程都可以调用函数:
call(GenServerPid, Msg)
cast(GenServerPid, Msg)
将由 gen_server 函数处理:
handle_call()
handle_cast()
在elixir中,有一个叫做Agent
的模块,它只是一个gen_server,用来存储State,就像一个计数器。多个进程可以更新计数器并检索当前计数。当然,某些进程必须启动 gen_server,然后将 pid 传递给其他想要 update/retrieve 计数的进程。
我有一个由另一台服务器启动的
gen_server
(my_gen_server.erl
)ejabberd
)在
my_gen_server.erl
中,我启动了另一个服务器来处理HTTP2
调用,如下所示:{ok, ServerPid} = apns:connect(cert, my_first_connection).
现在,
my_gen_server
正在接收来自ejabberd
和ServerPid
的消息,我按如下方式处理:1. handle_info({reconnecting, ServerPid}=Msg, State) -> %% do Something 2. handle_info({connection_up, ServerPid}=Msg, State) -> %% do Something 3. handle_info(#offline_msg{...} = _Msg, State) -> %% do Something
因此 1 和 2 由 ServerPid
发送,3 由 ejabberd
发送。这是有效的,但我不确定正确的行为。所以,
我的问题是:
- 对于来自多个客户端进程的 receive/handle 消息,这种
gen_server
行为是否正确?
请帮忙。
任何具有 gen_server 的 pid 的进程都可以使用 !
向 gen_server 发送消息,这将由 gen_server 的函数处理:
handl_info()
任何具有 gen_server 的 pid 的进程都可以调用函数:
call(GenServerPid, Msg)
cast(GenServerPid, Msg)
将由 gen_server 函数处理:
handle_call()
handle_cast()
在elixir中,有一个叫做Agent
的模块,它只是一个gen_server,用来存储State,就像一个计数器。多个进程可以更新计数器并检索当前计数。当然,某些进程必须启动 gen_server,然后将 pid 传递给其他想要 update/retrieve 计数的进程。