rewind-viewer icon indicating copy to clipboard operation
rewind-viewer copied to clipboard

Feature request: пакетный рендеринг кадра

Open nuqz opened this issue 6 years ago • 2 comments

В данный момент при отрисовке кадра для каждого объекта (отрезок, круг, квадрат и т.д.) клиент отправляет HTTP запрос. Возможно ли сделать так, чтобы rewind-viewer принимал запрос со всеми объектами в кадре вместе с вызовом метода клиента end_frame()?

Мои замеры для игры MadCars длиной в 2061 тик показали следующие результаты:

  1. Текущая реализация - 4 мин. 20 сек.
  2. Пакетная отправка кадра - 3 мин. 30 сек.

nuqz avatar Sep 10 '18 10:09 nuqz

Проблема с производительностью известна. Буферизация уже есть, она происходит внутри csimplesocket (в случае клиента для плюсов, для остальных языков - не знаю). Основные тормоза вызваны парсингом json на стороне сервера, поэтому когда буфер заполняется стратегия блокируется на вызове send. Для исправления ситуации есть мысли ввести бинарный протокол. Возможно это появится в будущих версиях. Заниматься буду не раньше, чем закончится MiniAiCup3.

kswaldemar avatar Sep 11 '18 10:09 kswaldemar

Прошло 2,5 года не знаю актуально ли еще.

Вариантов дальнейшей работы несколько:

  1. Попробовать буферизацию на стороне клиента, если отправлять объекты только на end_frame(). Поможет, если узкое место в зависании на забитом сокете.
  2. Модифицировать клиент на отправку в отдельном потоке, чтобы вызовы не тормозили основной процесс стратегии.
  3. Сделать бинарный протокол, т.к. на обработку json тратиться много времени. В архитектуре визуализатора готова точка расширения, но кажется что это нужно очень маленькому количеству людей

Пункты 1,2 можно сделать самому на стороне клиента Для 3 пункта нужно разработать спецификацию для каждого примитива (структуру байт в сообщениях) и модифицировать клиент. По готовой спецификации я напишу реализацию на стороне визуализатора. Если есть большая боль и желание это ускорить, то можно приложить свои силы)

kswaldemar avatar Nov 07 '20 18:11 kswaldemar