当我的GenServer从外部队列/主题接收消息时,它总是结束n handle_info [从外部调用]。所以,只是想知道,
以这种方式接收所有消息是好的,因为我必须通过一直评估消息来调用函数,或者还有其他任何方式。 例如,用户分享他的详细信息,向其他用户发送消息等。
我创建了一个GenServer并开始了这个过程,现在客户端可以将消息发送到某个队列来注册他们的详细信息[姓名,电话号码等]。
现在,当从客户端i收到的新消息无法从handle_info获取任何PID时。 那么,我该如何为该用户制作特定的流程。
def handle_info({_, data}, state) do
{:noreply, state}
end
答案 0 :(得分:1)
由于您使用的是GenServer
(或erlangs gen_server),因此您不应发送messeages进行显式处理(使用!
),而应使用call之类的接口函数(如果您希望使用某些值)从服务器返回)和cast(如果您只想发送一些日期,并且不需要等待回复。
第二件事是你也不应该将你的模块客户端暴露给GenServer
接口。而不是让他们调用GenServer:call
,你应该将它包装在模块中的一些功能中。如果你实施了一个国王你反击,你可以写这样的东西
def increase(counter) do
GenServer.cast(conter, {:increase})
done
def get_count(counter) do
GenServer.call(counter, {get_coung})
done
并在各自的handle...
函数中处理它们。