为什么 Swift NIO 示例使用 HTTP/2 到 HTTP/1 协议转换?
Why is Swift NIO example uses HTTP/2 to HTTP/1 protocol conversion?
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 示例存储库的修改 code snippet。
HTTP/2 是单个 TCP 连接(和新的有线协议)中多个流的 HTTP(/1) 语义。作为一个选项,SwiftNIO 因此可以允许您使用 HTTP(/1) 数据类型来处理 HTTP/2。这允许您完全重用您使用 SwiftNIO 和 HTTP/1 编写的 server/client 实现 HTTP/2,这对大多数人来说也是一个好处。
但是绝对不需要该翻译。如果您更喜欢直接对 HTTP2 frames 进行操作,则无需将 HTTP2ToHTTP1ServerCodec
添加到管道中。
稍后编辑:我还应该指出 HTTP2toHTTP1ServerCodec
实际上是一段非常简单的代码,它只是翻译 [=] 之间的入站和出站消息23=] 帧和 HTTP/1 消息部分。 Code is here.
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 示例存储库的修改 code snippet。
HTTP/2 是单个 TCP 连接(和新的有线协议)中多个流的 HTTP(/1) 语义。作为一个选项,SwiftNIO 因此可以允许您使用 HTTP(/1) 数据类型来处理 HTTP/2。这允许您完全重用您使用 SwiftNIO 和 HTTP/1 编写的 server/client 实现 HTTP/2,这对大多数人来说也是一个好处。
但是绝对不需要该翻译。如果您更喜欢直接对 HTTP2 frames 进行操作,则无需将 HTTP2ToHTTP1ServerCodec
添加到管道中。
稍后编辑:我还应该指出 HTTP2toHTTP1ServerCodec
实际上是一段非常简单的代码,它只是翻译 [=] 之间的入站和出站消息23=] 帧和 HTTP/1 消息部分。 Code is here.