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

Sat*_*ish 5 html5 netty spdy server-sent-events http2

我正在使用Netty 4.1-Beta6版本。

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

  1. 我正在考虑使用“服务器发送事件”功能-是否可以在Netty中使用HTTP2做到这一点,如果可以,如何?我是否应该通过发送将“最终帧”标志设置为false的数据帧来保持http2流打开?当我尝试此操作时,我发现内容被缓冲了。写入时,数据帧未到达客户端。我正在使用DefaultHttp2Encoder。我也尝试将'Transfer-Encoding'标头设置为'chunked'。

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

在此先感谢您的帮助。

Sat*_*ish 4

我和 Netty 玩得比较多。这是我针对上述两个问题找到的答案。

  1. 客户端和服务器都可以在发送标头/数据帧时将“endOfStream”发送为 false,从而使流保持在“打开”状态。为了避免在服务器端缓冲数据,我必须调用 flowController.writePendingBytes(),然后调用 ChannelHandlerContext.flush()'。

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

  1. 是的,客户端和服务器可以保持流打开并彼此独立地发送数据帧。

我第一次玩Netty,非常酷。Netty 团队干得好!