我的GenServer内部具有以下功能:
def add_event(param1, param2) do
Enum.each(:pg2.get_members("some_group"), fn pid -> GenServer.cast(pid, {:new_event, param1, param2}) end)
end
def handle_cast({:new_event, param1, param2}, state) do
#do something
{:noreply, state}
end
我的想法是,每当调用add_event
时,我都希望将此请求投射到其他节点中该组的所有成员。我的问题是,直接在公共api中进行转换还是在handle_cast
回调中进行转换更好?
答案 0 :(得分:2)
在Process
中进行分派(不在客户端api中进行分派)暗含这些利弊:
专家:
Process
内部,因此您{{1} }继续工作。 GenServer
,更频繁使用哪种pid
,添加调度中的一些逻辑。缺点:
event
而不是一个:一个用于调度,一个用于实际完成工作。更多行代码-> 您失去了可读性 handle_cast
用于两种流程 GenServer
如果我必须选择:我会在“客户端api”端进行分派,因为它是一种更简单的模式。如果我需要维持GenServer
的{{1}}和call
周围的状态,我会专门创建第二个状态。