HTTP / 2客户端 - 将响应关联到请求 - 可以依赖流ID吗?

时间:2017-06-02 17:09:32

标签: java netty http2

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

我不喜欢自己增加HttpConversionUtil.ExtensionHeaderNames.STREAM_ID的想法。我可以以某种方式将id netty用于streamId请求吗?

此外,创建新流需要很多资源吗?或者它只是一个标识符?

1 个答案:

答案 0 :(得分:1)

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

我已经检查了Netty来源并找到了下一步:

  1. HttpToHttp2ConnectionHandler用于编写请求。它具有私有方法getStreamId,在write方法中用于获取currentStreamId的值。但我们无法访问此变量。
  2. getStreamId方法使用另一种名为incrementAndGetNextStreamId的方法。因此,我们只能增加并获得新的streamId值,但无法获得当前值。
  3. 这两个类都标有注释@UnstableApi,因此将来这种行为可能会发生变化。

    以下是一些相关链接:

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