2016年12月5日月曜日

Elixirでクライアント・サーバ関係を実装する「GenServer」

Elixirでクライアント・サーバ関係を実装する「GenServer」 まあ、よくわかりませんが、雰囲気(?)だけは感じ取れます(笑)。
GenServerは他のElixirプロセスと同様のプロセスであり、状態の保持、コードの非同期実行などに使用できます。 このモジュールを使用して実装されたジェネリックサーバープロセス(GenServer)を使用する利点は、標準のインターフェイス関数セットを持ち、トレースとエラーレポートの機能を含むことです。 スーパービジョンツリー(supervision tree)にも適合します。
GenServerの動作は、共通のクライアントとサーバーの対話を抽象化します。 開発者は、コールバックと機能を実装するだけで済みます。
/lib/kv/stack.ex
defmodule Stack do
  use GenServer

  def handle_call(:pop, _from, [h | t]) do
    {:reply, h, t}
  end

  def handle_cast({:push, item}, state) do
    {:noreply, [item | state]}
  end
end
call は同期でサーバーからの返答を待ち、castは非同期で返答を待ちます。
$ iex -S mix

iex(1)> {:ok, pid} = GenServer.start_link(Stack, [:hello])
{:ok, #PID<0.123.0>}

iex(2)> GenServer.call(pid, :pop)
:hello

iex(3)> GenServer.cast(pid, {:push, :world})
:ok

iex(4)> GenServer.call(pid, :pop)
:world

参考サイト
Elixir の OTP (GenServer 編)(Qiita)
[Elixir]GenServerの基本を習得する(Code of Resistance!!さん)

0 件のコメント:

コメントを投稿