HTTP2 жизнеспособен для потокового видео или многопользовательских игр в реальном времени? - PullRequest
0 голосов
/ 26 апреля 2020

Попытка обернуть мою голову вокруг того, что возможно и как это сравнивается с веб-сокетами. Http2 позволяет серверу непрерывно отправлять клиенту сообщения sh. Существуют ли какие-либо ограничения, которые не позволяют использовать его для отправки видеопакетов достаточно быстро для работы потокового видео?

1 Ответ

2 голосов
/ 26 апреля 2020

HTTP / 2 pu sh предназначен для ресурсов pu sh, связанных с первичным ресурсом.

В основном используется для браузеров, где при запросе страницы index.html они выдвигаются style.css и application.js, на которые ссылаются index.html.

Технически, существует возможность потоковой передачи видео клиенту в одном ответе на запрос клиента (массовая загрузка).

Для более продвинутых функций, таких как буферизация немного впереди и загрузка только при потреблении видеопотока, HTTP-клиенты могут делать запросы диапазона .

Для загрузки параллельных потоков с различным разрешением - 720p против 1080p - клиент может сделать два разных запроса.

HTTP / 2 необходимо настроить так, чтобы у клиентов было большое окно управления потоком (см. этот ответ ), но для браузеров, которые это уже так, и большинство клиентских библиотек HTTP / 2 поддерживают такую ​​конфигурацию.

Так что это технически возможно, но как бы это сравнить с WebSocket?

В WebSocket полностью отсутствует понятие метаданных, поэтому разработчику приложения придется придумывать какой-то формат метаданных для запросов и ответов, например идентификатор / заголовок видеопотока, разрешение, диапазон и т. Д. c. и затем загрузите необработанное видео.

Заголовок кадра HTTP / 2 составляет 9 байтов, заголовок кадра WebSocket составляет 10 байтов (в предположении, что кадры большого размера sh). Однако максимальный размер кадра составляет 16 КиБ для HTTP / 2 и может быть больше для WebSocket, хотя, вероятно, не рекомендуется быть слишком большим (поскольку клиент может решить не выделять ресурсы для супер-больших кадров, отправляемых сервером).

Кроме того, в WebSocket существует понятие максимальный размер сообщения . Как правило, вы не можете просто отправить кадры WebSocket, принадлежащие одному и тому же сообщению, поэтому вам нужно будет разделить видео на несколько меньших сообщений (но это всего лишь техническая часть).

Наконец, HTTP / 2 может нести связь WebSocket в потоке HTTP / 2 ( RFC8441 ).

Это означает, что запрос / ответ HTTP / 2 может идеально имитировать связь WebSocket: у вас будет «бесконечный» запрос - тот, у которого есть содержимое запроса, которое никогда не заканчивается (до тех пор, пока связь не будет закрыта) - для обмена данными между клиентом и сервером, и «бесконечный» ответ - тот, который имеет содержание ответа, которое никогда не заканчивается (до тех пор, пока связь не будет закрыта) - для связи между сервером и клиентом.

Таким образом, я бы не стал использовать HTTP / 2 pu sh для потокового видео: обычный ответ HTTP / 2 может выполнять работу более эффективно ( как WebSocket).

Я считаю, что WebSocket действительно полезен для незапрошенной связи между сервером и клиентом. С HTTP / 2 клиент всегда должен инициировать запрос.

...