gpt4 book ai didi

erlang - 在 Elixir 中获取兄弟进程

转载 作者:行者123 更新时间:2023-12-04 17:08:47 24 4
gpt4 key购买 nike

我有一个 Elixir/Erlang 进程树:

parent (Supervisor)
├── child1 (GenServer)
└── child2 (GenServer)

child1(数据库客户端)具有 child2 需要使用的信息。将 Supervisor 进程的引用传递给 child2 以使 child2 始终具有对 child1 的有效引用的好方法是什么?我是否只需要重组我的应用程序以便 child2 由 child1 监督?

最佳答案

最简单的方法可能是 child1child2以本地别名注册。您可以在启动 GenServer 时执行此操作通过 name选项:

defmodule Child1 do
use GenServer

def start_link do
GenServer.start_link(__MODULE__, [], name: __MODULE__)
end
end

在这种情况下, Child1 支持的进程模块将在本地以别名 Child1 注册.然后,如果您想向它发送消息,您可以使用该别名而不是 PID .
defmodule Child1 do
# ...

def get_data do
GenServer.call(__MODULE__, :get_data)
end

def handle_call(:get_data, _from, state) do
{:reply, extract_data_from_state(state), state}
end
end

如果您想要一个更复杂的解决方案,例如可以注册许多相同类型的不同进程,请查看 gproc library

关于erlang - 在 Elixir 中获取兄弟进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30688877/

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