使用Netty HTTP2实现支持服务器推送事件

7
我正在使用Netty 4.1-Beta6版本。
我希望支持HTTP2服务器能够在现有连接上向HTTP2客户端推送事件的使用场景 - 这可能是来自云端的告警或定时器事件,需要传播到客户端。
我考虑使用“服务器发送事件”功能 - 在Netty中是否可以使用HTTP2实现这一点?如果可以,应该如何操作?我应该通过发送设置为false的数据帧来保持http2流处于打开状态吗?当我尝试这样做时,我注意到内容被缓冲了。数据帧并不会在我写入时立刻到达客户端。我正在使用DefaultHttp2Encoder。我也尝试将“Transfer-Encoding”头设置为“chunked”。
相关问题 - 在流处于“打开”状态后,HTTP2是否允许双向数据帧?服务器应该能够要求客户端提供数据,并且客户端应该能够在同一个流中响应数据(在建立流后反转客户端/服务器角色)。这种情况可能吗?
提前感谢您的帮助。
1个回答

4

我对Netty进行了更深入的尝试,以下是我对上述两个问题的发现:

  1. 客户端和服务器都可以通过在发送头部/数据帧时将 'endOfStream' 设为false来保持流处于“开放”状态。为了避免服务器端缓冲数据,我需要调用flowController.writePendingBytes()后紧跟着ChannelHandlerContext.flush()。

我已上传了我的示例代码 - https://github.com/skssfo/http2

  1. 是的,客户端和服务器可以保持流的开放状态并相互独立地发送数据帧。

这是我第一次使用Netty,它非常酷。Netty团队干得漂亮!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接