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