public class FlushConsolidationHandler extends ChannelDuplexHandler
ChannelDuplexHandler which consolidates Channel.flush() / ChannelHandlerContext.flush()
operations (which also includes
Channel.writeAndFlush(Object) / Channel.writeAndFlush(Object, ChannelPromise) and
ChannelHandlerContext.writeAndFlush(Object) /
ChannelHandlerContext.writeAndFlush(Object, ChannelPromise)).
Flush operations are generally speaking expensive as these may trigger a syscall on the transport level. Thus it is in most cases (where write latency can be traded with throughput) a good idea to try to minimize flush operations as much as possible.
If a read loop is currently ongoing, flush(ChannelHandlerContext) will not be passed on to the next
ChannelOutboundHandler in the ChannelPipeline, as it will pick up any pending flushes when
channelReadComplete(ChannelHandlerContext) is triggered.
If no read loop is ongoing, the behavior depends on the consolidateWhenNoReadInProgress constructor argument:
false, flushes are passed on to the next handler directly;true, the invocation of the next handler is submitted as a separate task on the event loop. Under
high throughput, this gives the opportunity to process other flushes before the task gets executed, thus
batching multiple flushes into one.explicitFlushAfterFlushes is reached the flush will also be forwarded as well (whether while in a read
loop, or while batching outside of a read loop).
If the Channel becomes non-writable it will also try to execute any pending flush operations.
The FlushConsolidationHandler should be put as first ChannelHandler in the
ChannelPipeline to have the best effect.
ChannelHandler.Sharable| Constructor and Description |
|---|
FlushConsolidationHandler()
Create new instance which explicit flush after 256 pending flush operations latest.
|
FlushConsolidationHandler(int explicitFlushAfterFlushes)
Create new instance which doesn't consolidate flushes when no read is in progress.
|
FlushConsolidationHandler(int explicitFlushAfterFlushes,
boolean consolidateWhenNoReadInProgress)
Create new instance.
|
bind, connect, deregister, read, writechannelActive, channelInactive, channelRegistered, channelUnregistered, userEventTriggeredensureNotSharable, isSharablepublic FlushConsolidationHandler()
public FlushConsolidationHandler(int explicitFlushAfterFlushes)
explicitFlushAfterFlushes - the number of flushes after which an explicit flush will be done.public FlushConsolidationHandler(int explicitFlushAfterFlushes,
boolean consolidateWhenNoReadInProgress)
explicitFlushAfterFlushes - the number of flushes after which an explicit flush will be done.consolidateWhenNoReadInProgress - whether to consolidate flushes even when no read loop is currently
ongoing.public void handlerAdded(ChannelHandlerContext ctx) throws java.lang.Exception
ChannelHandlerAdapterhandlerAdded in interface ChannelHandlerhandlerAdded in class ChannelHandlerAdapterjava.lang.Exceptionpublic void flush(ChannelHandlerContext ctx) throws java.lang.Exception
ChannelDuplexHandlerChannelHandlerContext.flush() to forward
to the next ChannelOutboundHandler in the ChannelPipeline.
Sub-classes may override this method to change behavior.flush in interface ChannelOutboundHandlerflush in class ChannelDuplexHandlerctx - the ChannelHandlerContext for which the flush operation is madejava.lang.Exception - thrown if an error occurspublic void channelReadComplete(ChannelHandlerContext ctx) throws java.lang.Exception
ChannelInboundHandlerAdapterChannelHandlerContext.fireChannelReadComplete() to forward
to the next ChannelInboundHandler in the ChannelPipeline.
Sub-classes may override this method to change behavior.channelReadComplete in interface ChannelInboundHandlerchannelReadComplete in class ChannelInboundHandlerAdapterjava.lang.Exceptionpublic void channelRead(ChannelHandlerContext ctx, java.lang.Object msg) throws java.lang.Exception
ChannelInboundHandlerAdapterChannelHandlerContext.fireChannelRead(Object) to forward
to the next ChannelInboundHandler in the ChannelPipeline.
Sub-classes may override this method to change behavior.channelRead in interface ChannelInboundHandlerchannelRead in class ChannelInboundHandlerAdapterjava.lang.Exceptionpublic void exceptionCaught(ChannelHandlerContext ctx, java.lang.Throwable cause) throws java.lang.Exception
ChannelInboundHandlerAdapterChannelHandlerContext.fireExceptionCaught(Throwable) to forward
to the next ChannelHandler in the ChannelPipeline.
Sub-classes may override this method to change behavior.exceptionCaught in interface ChannelHandlerexceptionCaught in interface ChannelInboundHandlerexceptionCaught in class ChannelInboundHandlerAdapterjava.lang.Exceptionpublic void disconnect(ChannelHandlerContext ctx, ChannelPromise promise) throws java.lang.Exception
ChannelDuplexHandlerChannelHandlerContext.disconnect(ChannelPromise) to forward
to the next ChannelOutboundHandler in the ChannelPipeline.
Sub-classes may override this method to change behavior.disconnect in interface ChannelOutboundHandlerdisconnect in class ChannelDuplexHandlerctx - the ChannelHandlerContext for which the disconnect operation is madepromise - the ChannelPromise to notify once the operation completesjava.lang.Exception - thrown if an error occurspublic void close(ChannelHandlerContext ctx, ChannelPromise promise) throws java.lang.Exception
ChannelDuplexHandlerChannelHandlerContext.close(ChannelPromise) to forward
to the next ChannelOutboundHandler in the ChannelPipeline.
Sub-classes may override this method to change behavior.close in interface ChannelOutboundHandlerclose in class ChannelDuplexHandlerctx - the ChannelHandlerContext for which the close operation is madepromise - the ChannelPromise to notify once the operation completesjava.lang.Exception - thrown if an error occurspublic void channelWritabilityChanged(ChannelHandlerContext ctx) throws java.lang.Exception
ChannelInboundHandlerAdapterChannelHandlerContext.fireChannelWritabilityChanged() to forward
to the next ChannelInboundHandler in the ChannelPipeline.
Sub-classes may override this method to change behavior.channelWritabilityChanged in interface ChannelInboundHandlerchannelWritabilityChanged in class ChannelInboundHandlerAdapterjava.lang.Exceptionpublic void handlerRemoved(ChannelHandlerContext ctx) throws java.lang.Exception
ChannelHandlerAdapterhandlerRemoved in interface ChannelHandlerhandlerRemoved in class ChannelHandlerAdapterjava.lang.ExceptionCopyright © 2008–2018 The Netty Project. All rights reserved.