8

Mix を使用してアプリケーションを作成すると、常にルート スーパーバイザ ファイルがプロジェクトに追加されます。supervise 関数の「子仕様」配列が空であることに注意してください。

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

アプリケーションのエントリ ポイントも作成されます。オンラインで見つけたいくつかの例を調べて、次のように書きました。

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

このアプリケーションは機能しますが、 App.start()App.Supervisor.start_link( )への呼び出しを削除しても機能します。

では、この場合、監督者は何のためにいるのでしょうか? スーパーバイザーの子仕様が空の場合、その意味は何ですか?

たとえば、ここにある Elixir の例 - https://github.com/IdahoEv/cowboy-elixir-example/blob/master/lib/cowboy_elixir_example.ex - スーパーバイザーを開始する呼び出しがコメントアウトされていることがわかります。 65行目。

しかし、Cowboy Erlang の公式の例では、このファイル - https://github.com/ninenines/cowboy/blob/master/examples/hello_world/src/hello_world_app.erl - 子仕様のない同様のルート スーパーバイザを作成し、呼び出します。ここのメイン アプリケーション ファイルの 22 行目 - https://github.com/ninenines/cowboy/blob/master/examples/hello_world/src/hello_world_app.erl

4

1 に答える 1