【问题标题】:Sending an HTTP/2 client preface with Netty使用 Netty 发送 HTTP/2 客户端前言
【发布时间】:2016-03-07 13:12:37
【问题描述】:

我正在尝试在 Netty 中开始使用 HTTP/2。我试过"hello world" example,它按预期工作。在示例中,管道如下所示:

服务器:

  • SslHandler
  • ApplicationProtocolNegotiationHandler
    • Http2ConnectionHandler

客户:

  • SslHandler
  • ApplicationProtocolNegotiationHandler
    • HttpToHttp2ConnectionHandler
    • SimpleChannelInboundHandler<Http2Settings>(在第一个 SETTINGS 帧之后从管道中删除)
    • SimpleChannelInboundHandler<FullHttpResponse>

我正在尝试(主要是出于教育目的)构建一个不进行 HTTP 到 HTTP/2 转换的客户端(即,我正在尝试编写一些“更接近金属”的东西)。我的服务器看起来几乎与示例服务器一模一样,但我的客户端管道看起来几乎与服务器管道一模一样:

  • SslHandler
  • ApplicationProtocolNegotiationHandler
    • Http2ConnectionHandler

我遇到的麻烦是客户端序言似乎没有按预期发送:

Dec 02, 2015 9:37:19 PM io.netty.handler.codec.http2.Http2ConnectionHandler processGoAwayWriteResult SEVERE: Sending GOAWAY failed: lastStreamId '0', errorCode '1', debugData 'HTTP/2 client preface string missing or corrupt. Hex dump for received bytes: 000000040000000000'. Forcing shutdown of the connection. javax.net.ssl.SSLException: SSLEngine closed already

这里要提到的另一件事是,我将通过 TLS 直接使用 HTTP/2,而不是尝试进行明文升级。

我已经阅读了所有“hello world”示例代码和所有基类,但我没有看到客户端在示例中将其前言发送到何处。我怀疑这与示例中的自毁设置处理程序有关,但除了稍后控制非序言流量的时间之外,看不到它的作用。

我也尝试过在Http2ConnectionHandlerBuilder 中使用server(boolean) 方法,但没有取得多大成功。我错过了一些明显的东西吗?我应该如何设置我的客户端管道(或者在设置我的管道之后我应该采取哪些步骤)来管理序言交换?

另外,这可能是因为客户端试图在前言交换发生之前发送GOAWAY(因为我要做的只是连接)。但是,如果是这种情况,那么打开连接并将其保持打开状态的“正确”方式是什么(只要足够长的时间让前言交换发生)?自毁处理程序是“预期”的方法吗?

编辑:澄清一下,我不是故意发送GOAWAY。如果这是正在发生的事情,那它本身就是一个谜。

非常感谢!

【问题讨论】:

    标签: netty http2


    【解决方案1】:

    我正在服用疯狂的药丸。使用.server(false) 构建客户端连接处理程序使一切按预期工作;我之前尝试过的时候一定是在运行旧代码。为噪音道歉!

    编辑:更具体地说,问题似乎是我试图在我的连接处理程序构建器的build0 方法中执行.server(false)。看来这是不允许的(或者,至少,不起作用),但我还不确定为什么。从实际使用构建器的事物中调用.server(false) 具有预期的结果。

    【讨论】:

    • 我目前正在尝试使用 netty 客户端来做同样的事情——跳过 HTTP-HTTP2 转换并直接在 HTTP2 中交谈。如果您可以分享您的代码 sn-p 将非常有帮助,因为我遇到了很多问题,而且我在网络上的任何地方都找不到任何示例。
    • @jeffreyveon 我没有太多的“sn-p”可以提供,但我正在建造的东西就在这里:github.com/relayrides/pushy/pull/213。查看ApnsClientMockApnsServer,了解我们如何为客户端和服务器构建管道。
    猜你喜欢
    • 2011-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-07
    • 2014-09-19
    • 2021-12-05
    • 2022-01-19
    相关资源
    最近更新 更多