Многопользовательская игра - Эликсирные каналы

Я новичок в Эликсире.

У меня есть приложение-эликсир для многопользовательской игры, которое просто тиражирует полученную команду всем игрокам, подключенным к каналу. Это работа, но есть некоторая задержка при репликации полученной команды. каков наилучший вариант для устранения проблемы с задержкой?

Для повторения команды всем игрокам, подключенным к каналу, я использую функцию трансляции. Является ли лучшая функция для этого?

См. следующий код:

defmodule GameWeb.GameChannel do
  use GameWeb, :channel

  alias Game.GameState
  alias Game.Error

  # join to topic game:*
  def join("game:" <> code, %{"email" => email}, socket) do
    case Map.has_key?(GameState.games(), code) do
      true ->
        socket = assign(socket, :player, 2)

        game =
          code
          |> GameState.get_game()
          |> Map.put(:player2, %{:email => email, :score => 0})
          |> GameState.update_game()

        socket = assign(socket, :game, game)
        {:ok, game, socket}

      false ->
        socket = assign(socket, :player, 1)

        game =
          GameState.create_game(code)
          |> Map.put(:player1, %{:email => email, :score => 0})
          |> GameState.update_game()

        socket = assign(socket, :game, game)
        {:ok, game, socket}
    end
  end

  # topic not found
  def join(_topic, _payload, _socket) do
    {:error, Error.get(:resource_not_found)}
  end

  def handle_in("playerAction", payload, socket) do
    broadcast!(socket, "playerAction", Map.put(payload, :from_player, socket.assigns.player))
    {:noreply, socket}
  end

end

person Nuno_Coletiv    schedule 12.02.2018    source источник
comment
Сколько стоит некоторая задержка? Вы используете это на одном узле или в кластере?   -  person Justin Wood    schedule 12.02.2018
comment
Иногда несколько секунд :\ В моей игре я создаю одного агента процесса для каждой игры только для сохранения текущего состояния игры. Одиночный узел.   -  person Nuno_Coletiv    schedule 12.02.2018
comment
Запускается ли это приложение в настоящее время на вашем локальном компьютере или где-то размещено?   -  person Justin Wood    schedule 12.02.2018
comment
Локальная машина. Почему?   -  person Nuno_Coletiv    schedule 12.02.2018
comment
Если бы оно было размещено кем-то другим, задержка, которую вы видите, может быть связана с сетью, особенно если вы физически находитесь далеко от того места, где размещается приложение. Что касается причины медленного воспроизведения, я не уверен. Нет ничего, что бросалось бы мне в глаза как медленное.   -  person Justin Wood    schedule 12.02.2018
comment
@JustinWood, спасибо за ответ. но при просмотре кода все в порядке? если у вас есть время, помогите мне с этим stackoverflow.com/questions/48705526   -  person Nuno_Coletiv    schedule 12.02.2018