I am trying to figure out if there’s an established best practice for connecting child processes within the same supervisor without using name registration.
I have the following processes
PortCacheStateServerWebServer- requires aPortCacheandStateServerfor startup
I am using a rest_for_one supervision strategy and trying to create a supervision tree like this.
I’m curious what the best way is to give WebServer a way to send messages to PortCache and WebServer without using name registration.
Here is what I currently have:
defmodule MyApp.Supervisor do
def start_link(_init_opt) do
# Start the supervisor with no children
with {:ok, sup} <- Supervisor.start_link([], strategy: :rest_for_one) do
{:ok, port_cache} = Supervisor.start_child(sup, PortCache)
{:ok, state_server} = Supervisor.start_child(sup, StateServer)
{:ok, _web_server} =
Supervisor.start_child(sup, {
WebServer,
port_cache: port_cache,
state_server: state_server
})
{:ok, sup}
end
end
end
I know generally we pass a list of children to a supervisor, but then we don’t have a way to reference the other process’s pids. Are there drawbacks to this approach or a better way of doing this?























