我正在尝试迁移用于使用分块类来响应某些请求的服务器代码。根据我收到的关于我之前提出的问题的反馈,我写信给频道 a DefaultHttpResponse
(带有Transfer-Encoding: chunked
),一些内容带有DefaultHttpContent
,最后是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 确认的那样,这些都不会发送出去。我还在写入中添加了一个完成处理程序,它们都表示写入已完成。如果我切换到使用 aFullHttpResponse
并跳过对它进行分块,那么一切正常,并且内容被写出。
然后我看了看,HttpContentEncoder::encode
我看不到 HttpResponse 本身将如何通过。如果将其设置为状态码 100,则它会这样做,但这显然不适合此用例。据我所知,该函数将为我的用例返回 null。
我错过了什么?
谢谢,森希尔。