mirror of
https://github.com/IS1DI/x0gp.git
synced 2026-07-16 20:47:55 +00:00
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/
Подключение к серверу
- Запустите
poc-server(см. корневойserver/README.md). - В UI клиента проверьте
WS URL— по умолчаниюws://localhost:8080/ws. - Укажите
driver_id(напримерdriver-1). - Connect → Join race.
- Управление:
W/↑— газS/↓— тормозA/←— руль влевоD/→— руль вправоSpace— ручник
- На 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).