0

我正在尝试迁移用于使用分块类来响应某些请求的服务器代码。根据我收到的关于我之前提出的问题的反馈,我写信给频道 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。

我错过了什么?

谢谢,森希尔。

4

1 回答 1

2

这是 Netty 4.0.0.CR1 中的一个错误。今天已经推送修复:https ://github.com/netty/netty/issues/1275

于 2013-04-16T08:03:19.113 回答