0

一部のリクエストに応答するためにチャンク クラスを使用していたサーバー コードを移行しようとしています。以前に尋ねた質問に対して受け取ったフィードバックに基づいて、チャネル a DefaultHttpResponse(with Transfer-Encoding: chunked)、いくつかのコンテンツ with DefaultHttpContentand lastlyに書き込みましたDefaultLastHttpContent。それが重要な場合、これはSSL全体にあります。私のパイプラインはかなり基本的です:

if (sslFactory != null) {
        SSLEngine engine = sslFactory.createSSLEngine(false);
        engine.setUseClientMode(false);
        p.addLast("ssl", new SslHandler(engine));
    }

    p.addLast("decoder", new HttpRequestDecoder(connectConfig.maxInitialLineLength(),
            connectConfig.maxHeaderSize(), connectConfig.maxChunkSize()));

    // Uncomment the following line if you don't want to handle HttpChunks.
    p.addLast("aggregator", new HttpObjectAggregator(1048576));

    p.addLast("encoder", new HttpResponseEncoder());

    p.addLast("deflater", new HttpContentCompressor());    

    ChannelHandler handler = new BusinessRequestHandler(...);

    // if enabled, use the execution handler
    if (eventExecutor.isDefined()) {
        p.addLast(eventExecutor.get(), "handler", handler);
    } else {
        p.addLast("handler", handler);
    }

いずれにせよ、tcpdump/Wireshark で確認したように、これは決して送信されません。また、書き込みに完了ハンドラーを追加しましたが、それらはすべて書き込みが完了したことを示していました。a の使用に切り替えてFullHttpResponseチャンク化をスキップすると、すべてが正常に機能し、コンテンツが書き出されます。

次にHttpContentEncoder::encode、HttpResponse 自体がどのように渡されるのかを調べましたが、わかりません。ステータス コード 100 に設定されている場合はそうなりますが、このユース ケースでは明らかに正しくありません。私が知る限り、その関数は私のユース ケースでは null を返します。

私は何が欠けていますか?

ありがとう、センティル。

4

1 に答える 1