HTTP2: Как реализовать функцию управления потоком? - PullRequest
0 голосов
/ 21 декабря 2018

Я изучаю некоторые функции http2, одна из них - Flow Control и хочу понять, что Как я могу это реализовать .Если можете, приведите пример или демонстрацию.Спасибо.

1 Ответ

0 голосов
/ 21 декабря 2018

Я реализовал HTTP / 2 в Jetty (сервер Java HTTP и WebSocket), поэтому я могу указать вам, как это было реализовано в Jetty - но вы можете посмотреть на другие проекты с открытым исходным кодом, которые реализуютHTTP / 2 и посмотрите, как они это сделали.

Реализация Jetty основана на классе FlowControlStrategy .

Существует две реализации: одна наивная (SimpleFlowControlStrategy) и одна.более эффективный (BufferingFlowControlStrategy).

В обоих случаях FlowControlStrategy получает события от реализации HTTP / 2, в частности:

  1. , когда кадр DATA отправляется другому узлу
  2. при получении кадра WINDOW_UPDATE от другого узла
  3. при получении кадра DATA от другого узла
  4. когда полученные данные используются приложением

В случае данных, отправляемых другому узлу, окно управления потоком «отправить» уменьшается;когда кадр WINDOW_UPDATE получен от другого однорангового узла, увеличивается окно управления потоком «send».

Аналогично, когда данные принимаются, окно управления потоком «receive» уменьшается;когда приложение использует полученные данные, окно управления потоком «прием» увеличивается - и, возможно, кадр WINDOW_UPDATE отправляется другому узлу, чтобы сигнализировать о том, что он может отправлять больше данных.

Требуется реализация HTTP / 2проверить эти два окна управления потоком и прекратить отправку данных, когда окно управления потоком «отправить» достигает нуля (или отрицательного значения);и сбой соединения, если он получает данные, когда окно управления потоком «получить» равно нулю (или отрицательно).После получения кадра WINDOW_UPDATE реализация HTTP / 2 должна возобновить отправку данных.

Это основной способ реализации управления потоком в HTTP / 2.В зависимости от используемой технологии и деталей реализации, есть еще много вещей, о которых нужно позаботиться, таких как организация очередей данных, копирование данных, безопасность потоков и т. Д., Но вы можете обратиться к ним во время написания реализации.

Веселитесь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...