Поддержка событий, отправленных сервером, с реализацией Netty HTTP2

Я использую версию Netty 4.1-Beta6.

Я хочу поддержать вариант использования, когда сервер HTTP2 должен иметь возможность отправлять события клиенту HTTP2 в существующем соединении - это может быть событие тревоги или таймера из облака, которое необходимо передать клиенту.

  1. Я думаю об использовании функции «Server Sent Event» - возможно ли это сделать с HTTP2 в Netty, если да, то как? Должен ли я держать поток http2 открытым, отправляя кадры данных с флагом 'final frame', установленным в значение false? Когда я пробую это сделать, я наблюдаю, что контент буферизуется. Фрейм данных не достигает клиента, когда я пишу. Я использую DefaultHttp2Encoder. Я также попытался установить заголовок «Transfer-Encoding» на «фрагментированный».

  2. Связанный вопрос - разрешает ли HTTP2 двунаправленные кадры данных, когда поток находится в «открытом» состоянии? Идея состоит в том, что сервер должен иметь возможность запрашивать данные у клиента, а клиент должен иметь возможность отвечать данными в одном потоке (изменение роли клиент / сервер после создания потока). Это возможно?

Заранее спасибо за помощь.


person Sathish    schedule 08.09.2015    source источник


Ответы (1)


Я немного больше поиграл с Нетти. Вот что я нашел на 2 вопроса выше.

  1. И клиент, и сервер могут держать поток в «открытом» состоянии, отправляя endOfStream как false, когда они отправляют кадры заголовка / данных. Чтобы избежать буферизации данных на стороне сервера, мне пришлось вызвать flowController.writePendingBytes (), а затем ChannelHandlerContext.flush () '.

Я загрузил сюда свой образец - https://github.com/skssfo/http2

  1. Да, клиент и сервер могут держать поток открытым и отправлять кадры данных независимо друг от друга.

Играю с Нетти впервые, это очень круто. Отличная работа, команда Netty!

person Sathish    schedule 15.09.2015