Agent
Agent 模組提供了我們可以實踐一個基本的服務器的一個 API 的功能。
可以讓我們在不同的節點間共用狀態及更新狀態。
透過 Agent,我們可以將一個模組包裝成可以初始化的一個服務器,並且可以讓不同行程間去做存取。
defmodule Test do
use Agent
def start_link(initail_state) do
Agent.start_link(fn -> initail_state end, name: __MODULE__)
end
def value do
Agent.get(__MODULE__, &(&1))
end
def add do
Agent.update(__MODULE__, &(&1 + 1))
end
def sub do
Agent.update(__MODULE__, &(&1 - 1))
end
end
__MODULE__是模組名稱,也就是Test。如此,我們便成功完成了一個可以做為一個簡易API執行的模組。
iex> Test.value()
0
iex> Test.add
:ok
iex> Test.add
:ok
iex> Test.value()
2
iex> Test.sub
:ok
iex> Test.value()
1
在 children 中放入 Test 以及其初始值的 Tuple,便能在監督樹下運行此 API。
children = [
{Test, 0}
]
Supervisor.start_link(children, strategy: :one_for_all)