Websocket server in Elixir or phoenix

Also figured out…

In init/1,

Process.send_after(self(), :ping, ping_timeout)

Then, add a handle_info

  @impl true
  def handle_info(:ping, %{options: options} = state) do
    ping_timeout = Keyword.get(options, :ping)

    Process.send_after(self(), :ping, ping_timeout)

    {:push, {:ping, ""}, state}
  end

Will suggest the peer has to send a PONG, and if it does, that will count as a communication and thus will reset the timeout.