0

的目的是什么HTTP2ToHTTP1ServerCodec。为什么需要将 HTTP/2 转换为 HTTP/1 协议?

channel.configureHTTP2Pipeline(mode: .server) { (streamChannel, streamID) -> EventLoopFuture<Void> in
    // For every HTTP/2 stream that the client opens, we put in the `HTTP2ToHTTP1ServerCodec` which
    // transforms the HTTP/2 frames to the HTTP/1 messages from the `NIOHTTP1` module.
    streamChannel.pipeline.addHandler(HTTP2ToHTTP1ServerCodec(streamID: streamID)).flatMap { () -> EventLoopFuture<Void> in
        // And lastly, we put in our very basic HTTP server :).
        streamChannel.pipeline.addHandler(HTTPServer())

这是来自 Swift NIO 示例 repo的修改代码片段。

4

1 回答 1

3

HTTP/2 是单个 TCP 连接(和新的有线协议)中多个流上的 HTTP(/1) 语义。作为一个选项,SwiftNIO 因此可以允许您使用 HTTP(/1) 数据类型来处理 HTTP/2。这使您可以完全重用您使用 SwiftNIO 编写的服务器/客户端实现,也可以将 HTTP/1 用于 HTTP/2,这对大多数人来说是一个好处。

但是,绝对不需要这种翻译。如果您更喜欢直接对HTTP2 帧进行操作,则无需将其添加HTTP2ToHTTP1ServerCodec到您的管道中。


稍后编辑:我还应该指出,这HTTP2toHTTP1ServerCodec实际上是一段非常简单的代码,它实际上只是在 HTTP/2 帧和 HTTP/1 消息部分之间转换入站和出站消息。代码在这里

于 2019-08-20T13:34:55.377 回答