Netty长轮询客户端聚合器永远不会找到消息结束

时间:2016-04-14 17:06:00

标签: java asynchronous netty nio long-polling

我有一个使用Netty实现的长轮询客户端来接受休息流。如果我取出解压缩器和聚合器,它可以工作,但我的块大小是有限的。我尝试增加块大小,这是有效的,但我担心在某些时候它可能会收到一个额外的大消息。

当我添加聚合器时,如下所示,没有数据“流”通过,当程序终止时,它们都会被收集并聚合并在最后被转出。如何向聚合器发出消息已完成的信号?或者我应该使用另一种方法。谢谢!

我的处理程序是SimpleChannelInboundHandler的实现。

public class SecureNestChannelInitializer extends ChannelInitializer<SocketChannel> {

private final SslContext sslCtx;
private final NestStreamingClient client;

public SecureNestChannelInitializer(SslContext sslCtx, NestStreamingClient client) {
    this.sslCtx = sslCtx;
    this.client=client;
}

@Override
public void initChannel(SocketChannel ch) throws Exception {
    ChannelPipeline pipeline = ch.pipeline();

    // Add SSL handler first to encrypt and decrypt everything.
    pipeline.addLast(sslCtx.newHandler(ch.alloc(), client.getHost(), client.getPort()));
    pipeline.addLast(new HttpClientCodec());
    // Remove the following line if you don't want automatic content decompression.
    pipeline.addLast("inflater", new HttpContentDecompressor());

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

}

1 个答案:

答案 0 :(得分:0)

我明白了。我无法控制服务器发送的内容,也没有发送空白的Http消息或每条消息结束的其他指示。我必须为分块编写自己的处理程序,所以我可以肯定,由于数据流中没有中断,它正在被正确分块。我使用HttpObjectAggregator代码作为示例并添加了我自己的逻辑。