Я разрабатываю небольшую футбольную игру, в которой движок игры (который вычисляет перемещение игрока и т.д.) работает на сервере, а рендеринг и обработка клавиатуры/мыши выполняется клиентом. Для сервера (Haskell) я хочу использовать
- Happstack для связи клиент-сервер
- Ямпа/Реактив для игрового движка
Каждые 20 мс клиент должен отправлять событиям клавиатуры и мыши на сервер через HTTP GET, получать текущий статус игры (JSON-закодированный мяч и позиции игрока) и визуализировать его. Я думаю об использовании инфраструктуры SDL для игрового цикла, обработки ввода и рендеринга.
Сервер в основном запускает два потока: сервер happstack получает HTTP GET, помещает команды клавиатуры/мыши в очередь, считывает текущий статус игры из второй очереди и отвечает на запрос HTTP GET.
Второй поток запускает игровой движок Yampa, как описано в Yampa Arcade: игровой движок вычисляет новый раунд так быстро, как (без тиков) и помещает результат в очередь рендеринга.
Общий вопрос: похоже ли это на возможную архитектуру?
Конкретный вопрос: как бы создать очередь рендеринга на стороне сервера: будет ли использовать Chan для этого? Если игровой движок быстрее в среднем, чем "тикание" на стороне клиента, очередь будет становиться все длиннее и длиннее. Как это можно обрабатывать с помощью Chan?
Ваши комментарии очень приветствуются!