Не могли бы вы объяснить немного больше о самой игре. Когда я думаю о футбольной игре, я думаю об игре, которая требует обратной связи в реальном времени, где ввод должен обрабатываться мгновенно, и я ожидаю, что входная информация игрока будет отправлена по сети немедленно. 20 мс - довольно большая задержка, и я думаю, что это будет заметно, когда игрок удерживает клавишу, пытаясь переместить своего персонажа, вероятно, он будет чувствовать себя вяло, как у некоторых типов сборщиков мусора.
Я также не понимаю, почему вы хотели бы использовать HTTP для такой игры (любая игра в этом отношении), почти все игры используют UDP, и я бы, вероятно, пошел по этому пути для вашего типа игры. Этот урок отлично подходит для изучения подобных вещей.
Я бы также поставил под сомнение ваш выбор сетевого формата данных. Зачем вам формат, который требует нетривиального анализа / форматирования при получении / отправке? Я полагаю, что отправка большого количества данных, и часто это занимает значительное время. Если бы я собирался использовать строки, я бы попытался использовать самый простой формат, который требует минимального разбора. В связанной системе, над которой я работал, это была многопроцессорная система реального времени, использующая сокеты для связи, и первоначально она использовала строки XML в качестве сетевого формата данных, и это было ужасно неэффективно, и все процессы были на одной машине.
Что касается Yampa и рендеринга на стороне сервера, поэтому, если мы рассматриваем FRP в контексте игр как средство реализации игровой логики и сущностей, я полагаю, что большинство сетевых игр имеют серверные и клиентские сущности. Обычно объекты, которые можно рендерить, являются клиентскими объектами, а не рендеримые являются серверными объектами, и я предполагаю, что некоторые объекты имеют представление на обоих. Поэтому в этом случае вы, вероятно, захотите запустить Yampa как на стороне сервера, так и на стороне клиента, и я постараюсь избежать всего, что связано с рендерингом на стороне сервера. Я считаю, что визуализируемые объекты должны преимущественно придерживаться клиентской части. Есть ли конкретная причина, по которой вы хотите получать команды рендеринга с сервера?