streamline Streamer pings
authorstwf <steven.fuchs@dockyard.com>
Wed, 14 Aug 2019 15:58:32 +0000 (11:58 -0400)
committerstwf <steven.fuchs@dockyard.com>
Wed, 14 Aug 2019 15:58:32 +0000 (11:58 -0400)
lib/pleroma/web/streamer.ex

index e66378cebfe6580334a4967f7faa15dbe11531cb..bbaddd8529f530e22b1fea21103541a27e7e50fb 100644 (file)
@@ -35,28 +35,21 @@ defmodule Pleroma.Web.Streamer do
   end
 
   def init(args) do
-    spawn(fn ->
-      # 30 seconds
-      Process.sleep(@keepalive_interval)
-      GenServer.cast(__MODULE__, %{action: :ping})
-    end)
+    Process.send_after(self(), %{action: :ping}, @keepalive_interval)
 
     {:ok, args}
   end
 
-  def handle_cast(%{action: :ping}, topics) do
-    Map.values(topics)
+  def handle_info(%{action: :ping}, topics) do
+    topics
+    |> Map.values()
     |> List.flatten()
     |> Enum.each(fn socket ->
       Logger.debug("Sending keepalive ping")
       send(socket.transport_pid, {:text, ""})
     end)
 
-    spawn(fn ->
-      # 30 seconds
-      Process.sleep(@keepalive_interval)
-      GenServer.cast(__MODULE__, %{action: :ping})
-    end)
+    Process.send_after(self(), %{action: :ping}, @keepalive_interval)
 
     {:noreply, topics}
   end