支持服务器发送事件与Netty HTTP2实现



我使用的是Netty 4.1-Beta6版本。

我想支持这样的用例,即HTTP2服务器应该能够将事件推送到现有连接上的HTTP2客户端-这可能是来自云的警报或计时器事件,需要传播到客户端。

  1. 我正在考虑使用"服务器发送事件"功能-是否有可能在Netty中使用HTTP2做到这一点,如果是这样,如何?我应该保持一个http2流打开发送数据帧与"最后帧"标志设置为false?当我尝试这样做时,我观察到的是内容得到缓冲。当我写的时候,数据帧没有到达客户端。我正在使用DefaultHttp2Encoder。我试着将'Transfer-Encoding'头设置为'chunked'。

  2. 相关问题-一旦流处于"打开"状态,HTTP2是否允许双向数据帧?其思想是,服务器应该能够从客户端请求数据,而客户端应该能够响应同一流中的数据(一旦流建立,客户端/服务器角色就反转了)。这可能吗?

提前感谢您的帮助。

我和Netty玩得更多。以下是我为以上两个问题找到的答案。

  1. 客户端和服务端都可以在发送报头/数据帧时发送'endOfStream'作为false来保持流处于'open'状态。为了避免服务器端数据的缓冲,我不得不调用flowController.writePendingBytes(),然后调用ChannelHandlerContext.flush()。

我已经上传了我的样本在这里- https://github.com/skssfo/http2

  • 是的,客户端和服务器可以保持流打开,并相互独立地发送数据帧。
  • 我第一次和Netty玩,它很酷。Netty团队干得好!

    最新更新