我正在尝试使用netty来实现HTTP / 2客户端。在此example(第93行)中,他们手动增加streamId并将其放置在地图上。当响应到来时,它们会寻找HttpConversionUtil.ExtensionHeaderNames.STREAM_ID标头参数,从而将响应与请求相关联。

我不喜欢自己增加streamId的想法。我可以以某种方式获取ID Netty用于writeAndFlush请求吗?

另外,创建新流是否需要大量资源?还是仅仅是标识符?

最佳答案

我很确定,目前您无法获得Netty生成和使用的streamId。另外,我也不喜欢自己增加streamId的想法,但是看起来可以使用当前的API来做到这一点。

我检查了Netty的来源,发现接下来的事情:


HttpToHttp2ConnectionHandler用于编写请求。它具有私有方法getStreamId,该方法在write方法中用于获取currentStreamId的值。但是我们无权访问此变量。
getStreamId方法使用另一个称为incrementAndGetNextStreamId的方法。因此,同样,我们只能递增并获取新的streamId值,而不能获取当前值。


这两个类都标有注释@UnstableApi,因此将来可能会改变这种行为。

以下是一些相关链接:


A little bit updated HTTP 2 client example from Netty repository
HTTP/2 Java Client Examples
Why netty http2 server always use odd number for streamId

07-27 14:01