2016-04-14 15 views
0

У меня есть длинный клиент опроса, реализованный с Netty, чтобы принять поток отдыха. Он работает, если я вынимаю декомпрессор и агрегатор, но размер моего куска ограничен. Я попытался увеличить размер куска, который работает, но я беспокоюсь, что в какой-то момент можно получить очень большое сообщение.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

Вы не можете делать потоковое видео с автоматической агрегацией, вам нужно вручную добавить сообщения, если вы хотите реализовать потоковое вещание. – Ferrybig

+0

спасибо, я не видел вашего ответа, но понял это. – user3561836

ответ

0

я понял это. Я не контролирую, что сервер отправляет, и он не отправляет пустое сообщение Http или другой индикатор конца каждого сообщения. Я должен был написать свой собственный обработчик для chunking, поэтому я мог быть уверен, что он получил chunked должным образом, учитывая отсутствие перерывов в потоке данных. Я использовал код HttpObjectAggregator в качестве примера и добавил свою собственную логику.