rewind-viewer
rewind-viewer copied to clipboard
Feature request: пакетный рендеринг кадра
В данный момент при отрисовке кадра для каждого объекта (отрезок, круг, квадрат и т.д.) клиент отправляет HTTP запрос. Возможно ли сделать так, чтобы rewind-viewer
принимал запрос со всеми объектами в кадре вместе с вызовом метода клиента end_frame()
?
Мои замеры для игры MadCars длиной в 2061 тик показали следующие результаты:
- Текущая реализация - 4 мин. 20 сек.
- Пакетная отправка кадра - 3 мин. 30 сек.
Проблема с производительностью известна. Буферизация уже есть, она происходит внутри csimplesocket (в случае клиента для плюсов, для остальных языков - не знаю). Основные тормоза вызваны парсингом json на стороне сервера, поэтому когда буфер заполняется стратегия блокируется на вызове send. Для исправления ситуации есть мысли ввести бинарный протокол. Возможно это появится в будущих версиях. Заниматься буду не раньше, чем закончится MiniAiCup3.
Прошло 2,5 года не знаю актуально ли еще.
Вариантов дальнейшей работы несколько:
- Попробовать буферизацию на стороне клиента, если отправлять объекты только на
end_frame()
. Поможет, если узкое место в зависании на забитом сокете. - Модифицировать клиент на отправку в отдельном потоке, чтобы вызовы не тормозили основной процесс стратегии.
- Сделать бинарный протокол, т.к. на обработку json тратиться много времени. В архитектуре визуализатора готова точка расширения, но кажется что это нужно очень маленькому количеству людей
Пункты 1,2 можно сделать самому на стороне клиента Для 3 пункта нужно разработать спецификацию для каждого примитива (структуру байт в сообщениях) и модифицировать клиент. По готовой спецификации я напишу реализацию на стороне визуализатора. Если есть большая боль и желание это ускорить, то можно приложить свои силы)