2
OTP와 같은 수퍼바이저에서 내 머리를 쓰려고합니다. (엘릭서를 사용하고 있지만) 주 수퍼바이저 트리가 아닌 이유를 알 수 없습니다. 스타트.수퍼바이저가 일할 수 없습니다.
나는 하나의 청취자 작업자와 함께 http 서버를 만들고 있고, 감독자는 (동적으로 시작된) 핸들러를 가지고있다. 나는 이것들 각각을 독자적으로 시작할 수 있으며, 리스너가 트리의 유일한 것이라면 트리를 시작할 수 있습니다.
여기에 불로 불사의 영약에 트리에서 관리자 정의에 대한
defmodule HTTPServer.Supervisor do
use Supervisor.Behaviour
def start_link(port) do
:supervisor.start_link({ :local, :sup }, __MODULE__, [port])
end
def init(port) do
tree = [
worker(HTTPServer.Listener, [port], id: :listener_sup),
supervisor(HTTPServer.HandlerSupervisor, [], shutdown: :infinity,
modules: [])
]
supervise(tree, strategy: :one_for_one)
end
end
defmodule HTTPServer.HandlerSupervisor do
use Supervisor.Behaviour
def start_link(_) do
IO.puts "starting handler supervisor"
:supervisor.start_link({ :local, :handler_sup }, __MODULE__, [])
end
def init(_) do
tree = [ worker(HTTPServer.Handler, [], restart: :temporary,
id: nil) ]
supervise(tree, strategy: :simple_one_for_one)
end
def start_child([socket]) do
IO.puts "starting handler child"
:supervisor.start_child(:handler_sup, [socket])
end
end
뭔가 감독자의 정의를 잘못 내가 밖으로 무엇을 알아낼 수 없습니다, 그것은 기본적으로 다시 내 프로젝트를 유지하는 유일한 일이 될 것으로 보인다.
어떤 도움을 주셔서 감사합니다!