我想在 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 的东西,希望你们中的某个人能帮助我在这里找到正确的方向。