在 Elixir 中传递消息
Message passing in Elixir
最近我开始学习 Elixir,但我在实现部分遇到了一些困难。
我想我确实理解 supervisor 和 children 的概念,但我不太习惯函数式编程。
你能给我一个这种场景的实现示例吗:
Root Supervisor 监管进程A 和B。B 也是其他一些进程的监管者。 A 应该不断地向 B 传递消息,B 应该能够将这些消息传递给它的 children。此外,B 的 children 应该能够将消息传递回 B。A 和 B 应该始终 运行.
请提供此类场景的最简单实施示例,或提供有关如何实施 parent-child、child-child 之间消息传递的一些线索。考虑到我正在为项目使用 mix。此外,A 和 B 应该使用 GenServer
例如,假设在 root supervisor 中我有这样的东西,但现在我不知道如何将消息从 A 传递到 B。
use Supervisor
def start_link(opts) do
Supervisor.start_link(__MODULE__, :ok, opts)
end
def start(_type, _args) do
children = [
{A, [name: NameForA]},
{B, [name: NameForB]}}
]
opts = [strategy: :one_for_one, name: Supervisor]
# See https://hexdocs.pm/elixir/Supervisor.html
# for other strategies and supported options
Supervisor.start_link(children, opts)
end
我的假设是我应该以某种方式将 A 的 PID 传递给 B 以了解将消息发送到哪里,但我真的不知道如何才能像这样获得 PID。也许我应该使用另一种方法?
欢迎任何类型的提示或提示。
目标进程可能由 Process.dest()
类型寻址,进程名称正是为此目的而存在。
在上面的示例中,可以将消息发送到 NameForA
。
另一方面,在 elixir Supervisor
中,行为明确致力于监督而不是干扰直接消息传递。也就是说,您可能需要更复杂的监督树。
最近我开始学习 Elixir,但我在实现部分遇到了一些困难。 我想我确实理解 supervisor 和 children 的概念,但我不太习惯函数式编程。 你能给我一个这种场景的实现示例吗:
Root Supervisor 监管进程A 和B。B 也是其他一些进程的监管者。 A 应该不断地向 B 传递消息,B 应该能够将这些消息传递给它的 children。此外,B 的 children 应该能够将消息传递回 B。A 和 B 应该始终 运行.
请提供此类场景的最简单实施示例,或提供有关如何实施 parent-child、child-child 之间消息传递的一些线索。考虑到我正在为项目使用 mix。此外,A 和 B 应该使用 GenServer
例如,假设在 root supervisor 中我有这样的东西,但现在我不知道如何将消息从 A 传递到 B。
use Supervisor
def start_link(opts) do
Supervisor.start_link(__MODULE__, :ok, opts)
end
def start(_type, _args) do
children = [
{A, [name: NameForA]},
{B, [name: NameForB]}}
]
opts = [strategy: :one_for_one, name: Supervisor]
# See https://hexdocs.pm/elixir/Supervisor.html
# for other strategies and supported options
Supervisor.start_link(children, opts)
end
我的假设是我应该以某种方式将 A 的 PID 传递给 B 以了解将消息发送到哪里,但我真的不知道如何才能像这样获得 PID。也许我应该使用另一种方法? 欢迎任何类型的提示或提示。
目标进程可能由 Process.dest()
类型寻址,进程名称正是为此目的而存在。
在上面的示例中,可以将消息发送到 NameForA
。
另一方面,在 elixir Supervisor
中,行为明确致力于监督而不是干扰直接消息传递。也就是说,您可能需要更复杂的监督树。