我正在尝试使用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。