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