【发布时间】:2021-04-03 08:46:39
【问题描述】:
我已经做了这个 genserver
defmodule Recorder do
use GenServer
def start_link(args) do
id = Map.get(args, :id)
GenServer.start_link(__MODULE__, args, name: id)
end
def init(state) do
schedule_fetch_call()
{:ok, state}
end
def handle_info(:jpeg_fetch, state) do
spawn(fn ->
IO.inspect("I am being called")
IO.inspect(DateTime.utc_now())
Fincher.request(:get, state.url) |> IO.inspect()
end)
schedule_fetch_call()
{:noreply, Map.put(state, :run, true)}
end
defp schedule_fetch_call do
Process.send_after(self(), :jpeg_fetch, 1000)
end
end
我在这种状态下每秒运行 1 个请求。
defp get_children do
Enum.map([
%{
id: :hdipc,
url: "http://77.66.206.55/jpgmulreq/1/image.jpg?key=1516975535684&lq=1&COUNTER"
}
], fn(camera) ->
Supervisor.child_spec({Recorder, camera}, id: camera.id)
end)
end
在application.ex。
我在这里使用spawn,但我不想使用spawn,解决这个问题最合乎逻辑和理想的方法是什么。
-
GenServer 将在哪里每秒发出一个请求。
-
也不要等待请求完成,因为请求可能需要一秒钟以上的时间。
-
在 HTTP 请求-响应的情况下,我还想做一些其他的特定操作。
我不想让 genserver 筋疲力尽而崩溃。但要处理请求的背压,这将每秒进行一次(不是 genstage,因为需求不确定)。
是否可以使用GenServer 使其无需生成和处理请求即可运行?任何指导或帮助都会很棒。
【问题讨论】:
标签: elixir