一部のリクエストに応答するためにチャンク クラスを使用していたサーバー コードを移行しようとしています。以前に尋ねた質問に対して受け取ったフィードバックに基づいて、チャネル a DefaultHttpResponse
(with Transfer-Encoding: chunked
)、いくつかのコンテンツ with DefaultHttpContent
and 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 を返します。
私は何が欠けていますか?
ありがとう、センティル。