Podczas korzystania z funkcji "Utwórz aplikację" zawsze dodaje się do projektu główny plik nadzorcy. Zwróć uwagę, że tablica "child spec" w funkcji nadzorowania jest pusta.Eliksir/Erlang and Cowboy - Korzystanie z funkcji nadzorowania
app.ex:
defmodule App.Supervisor do
use Supervisor
def start_link do
Supervisor.start_link(__MODULE__, :ok)
end
def init(args) do
supervise([], [strategy: :one_for_one])
end
end
Punkt wejścia do aplikacji jest również stworzony dla Ciebie. Pracując przez kilka przykładów znalazłem w Internecie, napisałem co następuje:
defmodule App do
def start(_type, _args) do
dispatch = :cowboy_router.compile([
{
:_,
[
# Simple JSON test.
{"/test", app.Handle.test, []},
]
}
])
{:ok, _} = :cowboy.start_http(
:http,
100,
[{:port, 8080}],
[{ :env, [{:dispatch, dispatch}]}]
)
App.Supervisor.start_link()
end
end
Ta aplikacja działa, ale działa również jeśli usunąć wywołanie App.Supervisor.start_link() w App.start().
Do czego służy przełożony w tym przypadku? Jeśli specyfikacja dziecka dla przełożonego jest pusta, jaki jest tego sens?
Na przykład, w przykładzie Elixir znaleźć tutaj - https://github.com/IdahoEv/cowboy-elixir-example/blob/master/lib/cowboy_elixir_example.ex - Widać, że wezwanie do rozpoczęcia przełożonego jest wypowiedziało się na linii 65.
Ale w oficjalnym Cowboy Erlang przykład ten plik - https://github.com/ninenines/cowboy/blob/master/examples/hello_world/src/hello_world_app.erl - Tworzy podobnego administratora głównego bez dodatku potomnego, a następnie wywołuje go w głównym pliku aplikacji tutaj, w linii 22 - https://github.com/ninenines/cowboy/blob/master/examples/hello_world/src/hello_world_app.erl