возможно сервер толчок. Но если клиент является низкоуровневым причалом, возможно ли инициировать новый сеанс или поток с сервера? Предполагается, что клиент является низкоуровневым клиентом на причале, и соединение уже установлено.Возможно ли инициировать сеанс или поток http2 из Jetty Предполагая, что соединение http2 уже существует?
ответ
После установления первоначального соединения и обмена прейзами протокол HTTP/2 является симметричным протоколом.
HTTP-семантическая требует от клиента для инициирования запросов, но на более низком уровне - на уровне протокола кадрирования HTTP/2 - это не является необходимым, и это возможно для сервера, чтобы инициировать поток в сторону клиента.
В то время как HTTP/2 протокола кадрирование симметрично после предисловия, он по-прежнему привязан к протоколу HTTP семантического, что вам нужно отправить HEADERS
кадр (даже пустой) перед DATA
кадром. Однако это может быть не очень затруднительным, если вы хотите создать собственный протокол поверх структуры HTTP/2, у вас просто будет несколько дополнительных байтов для отправки по сети.
В качестве стороннего предложения существуют предложения, которые используют кадрирование HTTP/2 для переноса кадров WebSocket (чистый двунаправленный протокол) внутри кадров HTTP/2 DATA
, в том, что по существу является бесконечным запросом с бесконечным ответом. Но я отвлекся.
Что касается специфичной реализации Jetty для HTTP/2, можно ли инициировать поток с сервера на клиент в Android?
Ответ в два раза.
Первое, что в текущей реализации (Jetty 9.3.8) есть предположение, что протокол, транспортируемый по каскаду HTTP/2, является HTTP. Таким образом, инициируемый сервером поток в настоящее время удаляется клиентом. Было бы довольно легко переопределить это поведение и позволить клиенту правильно обрабатывать потоки, инициированные сервером, так же, как сервер обрабатывает потоки, инициированные клиентом.
Во-вторых, для поддержки HTTP/2 Jetty требуется JDK 8, и на данный момент это не доступно в Android. Если у вас уже есть HTTP/2 Android-клиенты, которые могут обрабатывать потоки, инициированные сервером, прокомментируйте этот ответ, который, насколько мне действительно интересен.
Идея инициируемых сервером потоков интригует, хотя, и я подал this issue, чтобы отслеживать ее. Если это действительно важно для вас, вы можете связаться с Webtide (компанией, стоящей за Jetty), чтобы спонсировать реализацию.
спасибо за подробный ответ @sbordet, и я ищу код клиента и сервера. Замечательно, что его проще реализовать. – Nambi