Phoenixアプリケーションの隣で同じ一連の操作を何度も繰り返し実行したい(もちろん、ワーカーで何かが壊れた場合にWebアプリ全体をクラッシュさせることなく)、GenServer、Elixirのタスク、エージェント、またはこれまで考えたことのないまったく別のもの。
Phoenix アプリを起動すると、ワーカーも起動する必要があります。これは、定期的にシリアル接続の値を取得し、Phoenix チャネルを介してそれらをブロードキャストし、@save_interval
到達するまでそれらを収集してから、中央値を計算し、別のチャネルを介してその中央値をブロードキャストし、 InfluxDB に書き込みます。今、私は次のようなもの(一種の作業)を持っています:
def do_your_thing(serial_pid) do
Stream.interval(@interval_live)
|> get_new_values_from_serial(serial_pid)
|> broadcast!("live-channel:#{@name}")
|> Enum.take(div(@interval_save, @interval_live))
|> calculate_medians()
|> broadcast!("update-channel:#{@name}")
|> write_to_database()
do_your_thing(serial_pid) # repeat
end
私はすべての OTP のことを理解し始めたばかりで、あなたの誰かが私がここで正しい方向につまずくのを手伝ってくれることを願っています.