Files
x0gp/server/web

x0gp · PoC web client

Минимальный vanilla JS клиент для проверки PoC-сервера из этой же папки. Без сборки, без зависимостей — открывается в браузере.

Запуск

Вариант А — открыть файл напрямую:

# Windows
start web/index.html

# Linux
xdg-open web/index.html

# macOS
open web/index.html

Некоторые браузеры не разрешают WebSocket к чужим origin со страницы, открытой по file://. Если что — поднимите мини-сервер (вариант Б).

Вариант Б — раздать через тот же poc-server:

В cmd/poc-server/main.go есть TODO — добавить http.FileServer для web/. После этого клиент будет доступен по http://localhost:8080/.

Вариант Вpython -m http.server:

cd server/web
python -m http.server 5173
# открыть http://localhost:5173/

Подключение к серверу

  1. Запустите poc-server (см. корневой server/README.md).
  2. В UI клиента проверьте WS URL — по умолчанию ws://localhost:8080/ws.
  3. Укажите driver_id (например driver-1).
  4. ConnectJoin race.
  5. Управление:
    • W / — газ
    • S / — тормоз
    • A / — руль влево
    • D / — руль вправо
    • Space — ручник
  6. На canvas появится ваша машинка (синяя) и машинки других подключённых драйверов (оранжевые).

Что смотреть

  • tick Hz в верхней панели — частота приходящих race_snapshot. Должно держаться ~30 Hz.
  • rtt — round-trip ping/pong, в PoC без сети это 0–2 ms.
  • seq — растёт с каждым отправленным сообщением.
  • Телеметрия — speed/heading/lap/sector вашей машинки.
  • Лог — все входящие/исходящие сообщения (кроме ping/pong).

Что PoC делает

  • Открывает WebSocket, шлёт client_hello.
  • По кнопке— join_race / leave_race.
  • Каждые 33 ms (≈30 Hz) шлёт input_state (throttle/brake/steer/handbrake).
  • Каждые 1000 ms шлёт ping для измерения RTT.
  • Получает race_snapshot и рисует все машинки на канвасе.
  • Получает input_ack, race_event, correction, error и логирует их.

Что PoC НЕ делает

  • Нет предиктивного сглаживания (interpolation/extrapolation) — увидите «дёрганье», это нормально для PoC.
  • Нет клиент-сайд предикции — добавим, когда появится настоящая модель физики.
  • Нет тач-управления для мобильных — клавиатура только.
  • Нет авторизации, биллинга, чата — это всё вне PoC.

Что дальше

  • Когда proto/ будет сгенерирован в Go и JS — заменим JSON на protobuf.
  • Подключим gRPC-Web или бинарный WS-фрейминг.
  • Добавим предиктивный слой и интерполяцию.
  • Добавим мобильный layout (touch steering + pedals).