Почему в примере Swift NIO используется преобразование протокола HTTP/2 в HTTP/1?
Какова цель 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.
1 ответ
HTTP/2 - это семантика HTTP(/1) для нескольких потоков в одном TCP-соединении (и новый проводной протокол). Как вариант, SwiftNIO может позволить вам использовать типы данных HTTP(/1) для обработки HTTP/2. Это позволяет вам полностью повторно использовать свои реализации сервера / клиента, которые вы написали, используя SwiftNIO и HTTP/1 для HTTP/2, что является преимуществом для большинства людей.
Этот перевод, однако, абсолютно не требуется. Если вы предпочитаете работать с кадрами HTTP2 напрямую, вам не нужно добавлять HTTP2ToHTTP1ServerCodec
к вашему трубопроводу.
Позже отредактируйте: я должен также указать, что HTTP2toHTTP1ServerCodec
на самом деле это довольно простой кусок кода, который буквально просто переводит входящие и исходящие сообщения между кадрами HTTP/2 и частями сообщения HTTP/1. Код здесь.