HTTP2ToHTTP1ServerCodec
的用途是什么。为什么需要将 HTTP/2 协议(protocol)转换为 HTTP/1 协议(protocol)?
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())
这是修改后的 code snippet来自 Swift NIO 示例存储库。
最佳答案
HTTP/2 是在单个 TCP 连接(和新的有线协议(protocol))中的多个流上的 HTTP(/1) 语义。作为一个选项,SwiftNIO 因此可以允许您使用 HTTP(/1) 数据类型来处理 HTTP/2。这允许您完全重用您使用 SwiftNIO 和 HTTP/1 为 HTTP/2 编写的服务器/客户端实现,这对大多数人来说都是一个好处。
然而,该翻译绝对不是必需的。如果您更喜欢在 HTTP2 frames 上操作直接,您不需要将 HTTP2ToHTTP1ServerCodec
添加到您的管道。
稍后编辑:我还应该指出 HTTP2toHTTP1ServerCodec
实际上是一段非常简单的代码,它只是翻译 HTTP/2 帧之间的入站和出站消息和 HTTP/1 消息部分。 Code is here .
关于swift - 为什么 Swift NIO 示例使用 HTTP/2 到 HTTP/1 协议(protocol)转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57574726/