Real-Time Backend

WebTransport: будущее real-time в браузере

Онлайн-шутер. 20 игроков, позиции обновляются 20 раз в секунду. WebSocket: один TCP-пакет потерян - все 400 сообщений/сек замораживаются до retransmit. Spike 100-300мс. В шутере это смерть. WebTransport датаграммы: потеря - следующая позиция придёт через 50мс. Это и есть разница.

  • **Google Meet**: эксперименты с WebTransport для снижения jitter видео. QUIC позволяет независимо передавать аудио и видео потоки без взаимной блокировки
  • **Cloudflare Workers**: поддержка WebTransport с 2023. Edge-сервера с HTTP/3 + WebTransport для глобального low-latency real-time
  • **Unity WebGL**: рассматривает WebTransport как замену WebSocket для браузерных игр. Датаграммы для позиций, надёжные потоки для игровых событий

WebTransport: QUIC вместо TCP для браузеров

2022 год. Chrome и Firefox поддерживают WebTransport - браузерный API поверх HTTP/3 (QUIC). QUIC работает поверх UDP, но с надёжностью TCP и TLS 1.3 встроенными. Ключевое: QUIC устраняет head-of-line blocking, от которого страдает WebSocket (поверх TCP): потеря одного пакета блокирует только один поток, не все.

WebTransport предоставляет два режима: датаграммы (UDP-семантика: быстро, без гарантии) и потоки (TCP-семантика: надёжно, упорядоченно). Можно открыть N независимых потоков - потеря пакета в одном не блокирует другие. Это невозможно в WebSocket: один TCP-поток, одна очередь пакетов.

QUIC-параллель: HTTP/2 multiplexing решил head-of-line blocking на уровне HTTP - несколько запросов по одному TCP-соединению. Но если TCP-пакет теряется, буферизация блокирует ВСЕ HTTP/2 потоки. QUIC решает это на транспортном уровне: каждый QUIC stream независим. WebTransport - это HTTP/2 multiplexing, исправленный.

В чём главное преимущество WebTransport перед WebSocket для real-time игр?

Датаграммы: unreliable delivery для real-time

Датаграммы - UDP-семантика в браузере. Нет гарантии доставки, нет порядка, нет retransmission. Для real-time данных это плюс: устаревшая позиция игрока в 50 мс не нужна - новая придёт через 50 мс. Retransmit создал бы latency spike, а датаграмма просто теряется. Game-changer для игр, голоса, видео.

MTU ограничение: датаграммы ограничены размером QUIC пакета (~1200 байт). Для больших данных - потоки. Практика: позиции игроков (20-50 байт) → датаграммы. Загрузка карты (MB) → поток. WebRTC DataChannel тоже поддерживает unreliable mode, но WebTransport проще в настройке (нет ICE/STUN/TURN).

Почему потеря датаграммы с позицией игрока лучше, чем её retransmission?

Потоки: multiplexing без head-of-line blocking

WebTransport потоки - надёжные, упорядоченные, как TCP, но независимые. Каждый поток - отдельная QUIC stream. Потеря пакета в потоке 'чат' не блокирует поток 'игровые события'. Это решает главную проблему WebSocket: один TCP-поток = одна очередь = head-of-line blocking для всего.

Почему потеря пакета в одном WebTransport потоке не блокирует другие потоки?

WebTransport vs WebSocket: когда что выбрать

WebTransport не убивает WebSocket - разные задачи. WebSocket: широкая поддержка (все браузеры с 2011), простота, идеален для чатов/уведомлений где latency некритична. WebTransport: cutting-edge (Chrome 97+, Firefox 114+, Safari экспериментально), нужен HTTP/3 сервер, сложнее в настройке, но без head-of-line blocking.

Production-статус: WebTransport используется в Zoom Web Client (для снижения jitter), Google Meet, и экспериментально в онлайн-играх. Cloudflare поддерживает WebTransport на Workers. Основной барьер: HTTP/3 серверная инфраструктура сложнее HTTP/2, и браузерная поддержка пока неполная. Прогноз: через 2-3 года WebTransport станет стандартом для real-time в браузере.

WebTransport - это WebSocket поверх HTTP/3

WebTransport - отдельный протокол поверх HTTP/3 (QUIC). У него другие API (датаграммы, независимые потоки), другие гарантии и другая семантика доставки

WebSocket - upgrade существующего HTTP-соединения, один поток. WebTransport использует HTTP/3 CONNECT-метод для туннелирования, но предоставляет совершенно другие примитивы: unreliable datagrams, multiple independent streams. Это не 'быстрый WebSocket' - это другой инструмент

Когда WebSocket предпочтительнее WebTransport несмотря на технические преимущества последнего?

Связанные темы

WebTransport - следующий этап эволюции браузерных real-time протоколов:

  • WebSocket Protocol — WebSocket - основной аналог. WebTransport решает head-of-line blocking которого нет в WebSocket
  • Сравнение подходов — WebTransport занимает место в матрице: надёжность vs latency vs browser support
  • Pub/Sub паттерн — WebTransport потоки и датаграммы реализуют pub/sub и streaming паттерны по-новому

Ключевые идеи

  • **WebTransport = QUIC в браузере**: поверх HTTP/3, TLS 1.3 встроен. Устраняет head-of-line blocking TCP.
  • **Датаграммы**: unreliable, unordered. UDP-семантика для игровых позиций, голоса, видео - потеря лучше retransmit.
  • **Независимые потоки**: N потоков в одном соединении. Потеря пакета в потоке A не блокирует поток B.
  • **WebSocket vs WebTransport**: WebSocket - 99% браузеров, просто, для чата. WebTransport - Chrome/Firefox, HTTP/3 нужен, для игр/видео.
  • **Статус 2024**: production в Google Meet, Cloudflare. Safari экспериментально. Стандарт через 2-3 года.

Вопросы для размышления

  • WebTransport требует HTTP/3 сервер. Как оценить стоимость миграции инфраструктуры (nginx → caddy/quiche) для конкретного проекта?
  • Датаграммы ограничены MTU (~1200 байт). Как проектировать игровые сообщения позиций для 60 игроков в этом ограничении?
  • WebRTC тоже поддерживает unreliable DataChannel. Когда выбрать WebRTC, а когда WebTransport для браузерной игры?

Связанные уроки

  • rt-15 — MQTT - другой end of spectrum: IoT vs браузерный real-time
  • rt-04 — WebSocket - основной аналог для сравнения
  • rt-17 — WebTransport реализует pub/sub и streaming паттерны с QUIC
  • net-03-physical — QUIC поверх UDP - важно понимать network stack
  • rt-06 — WebTransport расширяет сравнение протоколов: новое поколение
  • net-24-http2-http3
WebTransport: будущее real-time в браузере

0

1

Войти