Netty 4和服务器分块响应

时间:2013-04-16 03:16:30

标签: netty

我正在尝试迁移过去用于使用chunked类的服务器代码来响应某些请求。根据我之前收到的问题收到的反馈意见,我写了一个频道DefaultHttpResponseTransfer-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确认时,这些都没有被发送过。我还为写入添加了一个完成处理程序,它们都表明写入完成了。如果我切换到使用FullHttpResponse并跳过分块,那么一切正常,内容就会被写出来。

然后我看了HttpContentEncoder::encode,我看不出HttpResponse本身是如何通过的。它将被设置为状态代码100,但对于此用例显然不正确。据我所知,该函数将为我的用例返回null。

我错过了什么?

谢谢, 塞特希。

1 个答案:

答案 0 :(得分:2)

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