Почему в примере 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. Код здесь.

Другие вопросы по тегам