【问题标题】:HTTP/2 client - associate response to request - can rely on stream id?HTTP/2 客户端 - 将响应与请求相关联 - 可以依赖流 ID?
【发布时间】:2017-11-04 04:09:58
【问题描述】:

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

我不喜欢自己增加streamId 的想法。我能否以某种方式将网络的 id 用于writeAndFlush 请求?

另外,创建一个新流需要很多资源吗?还是只是一个标识符?

【问题讨论】:

    标签: java netty http2


    【解决方案1】:

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

    我检查了 Netty 资源并找到了以下内容:

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

    这两个类都标有注释@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

    【讨论】:

    • 所以我决定不依赖streamId,并要求服务器端开发人员从请求中读取特殊标头(例如“X-id”)并将其放入响应中。
    • 我认为,这不是很关键,但也不是很好。主要缺点是现在所有 API 客户端都必须牢记,他们应该在请求中提供 X-Id 并从响应中获取。但是,对于高并发 API 来说可能没问题,因为这甚至可以使用 HTTP/1.1。
    • 是的,这是针对具体项目的临时解决方案,但我发现没有办法更好地实施它
    猜你喜欢
    • 2011-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-09
    • 2021-04-10
    • 1970-01-01
    • 2019-05-31
    • 1970-01-01
    相关资源
    最近更新 更多