public class FlowControlHandler extends ChannelDuplexHandler
FlowControlHandler ensures that only one message per read() is sent downstream.
Classes such as ByteToMessageDecoder or MessageToByteEncoder are free to emit as
many events as they like for any given input. A channel's auto reading configuration doesn't usually
apply in these scenarios. This is causing problems in downstream ChannelHandlers that would
like to hold subsequent events while they're processing one event. It's a common problem with the
HttpObjectDecoder that will very often fire an HttpRequest that is immediately followed
by a LastHttpContent event.
{@code
ChannelPipeline pipeline = ...;
pipeline.addLast(new HttpServerCodec());
pipeline.addLast(new FlowControlHandler());
pipeline.addLast(new MyExampleHandler());
class MyExampleHandler extends ChannelInboundHandlerAdapter {ChannelConfig.setAutoRead(boolean) ChannelHandler.Sharable | Constructor and Description |
|---|
FlowControlHandler () |
FlowControlHandler (boolean releaseMessages) |
| Modifier and Type | Method and Description |
|---|---|
void |
channelInactive (ChannelHandlerContext ctx)
Calls
ChannelHandlerContext.fireChannelInactive() to forward
to the next ChannelInboundHandler in the ChannelPipeline. |
void |
channelRead (ChannelHandlerContext ctx,
Object msg)
Calls
ChannelHandlerContext.fireChannelRead(Object) to forward
to the next ChannelInboundHandler in the ChannelPipeline. |
void |
channelReadComplete (ChannelHandlerContext ctx)
Calls
ChannelHandlerContext.fireChannelReadComplete() to forward
to the next ChannelInboundHandler in the ChannelPipeline. |
void |
handlerAdded (ChannelHandlerContext ctx)
Do nothing by default, sub-classes may override this method.
|
void |
handlerRemoved (ChannelHandlerContext ctx)
Do nothing by default, sub-classes may override this method.
|
void |
read (ChannelHandlerContext ctx)
Calls
ChannelHandlerContext.read() to forward
to the next ChannelOutboundHandler in the ChannelPipeline. |
bind, close, connect, deregister, disconnect, flush, write channelActive, channelRegistered, channelUnregistered, channelWritabilityChanged, exceptionCaught, userEventTriggered ensureNotSharable, isSharable clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait exceptionCaught public FlowControlHandler()
public FlowControlHandler(boolean releaseMessages)
public void handlerAdded(ChannelHandlerContext ctx) throws Exception
ChannelHandlerAdapter handlerAdded in interface ChannelHandler handlerAdded in class ChannelHandlerAdapter Exception public void handlerRemoved(ChannelHandlerContext ctx) throws Exception
ChannelHandlerAdapter handlerRemoved in interface ChannelHandler handlerRemoved in class ChannelHandlerAdapter Exception public void channelInactive(ChannelHandlerContext ctx) throws Exception
ChannelInboundHandlerAdapter ChannelHandlerContext.fireChannelInactive() to forward
to the next ChannelInboundHandler in the ChannelPipeline.
Sub-classes may override this method to change behavior.channelInactive in interface ChannelInboundHandler channelInactive in class ChannelInboundHandlerAdapter Exception public void read(ChannelHandlerContext ctx) throws Exception
ChannelDuplexHandler ChannelHandlerContext.read() to forward
to the next ChannelOutboundHandler in the ChannelPipeline.
Sub-classes may override this method to change behavior.read in interface ChannelOutboundHandler read in class ChannelDuplexHandler Exception public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception
ChannelInboundHandlerAdapter ChannelHandlerContext.fireChannelRead(Object) to forward
to the next ChannelInboundHandler in the ChannelPipeline.
Sub-classes may override this method to change behavior.channelRead in interface ChannelInboundHandler channelRead in class ChannelInboundHandlerAdapter Exception public void channelReadComplete(ChannelHandlerContext ctx) throws Exception
ChannelInboundHandlerAdapter ChannelHandlerContext.fireChannelReadComplete() to forward
to the next ChannelInboundHandler in the ChannelPipeline.
Sub-classes may override this method to change behavior.channelReadComplete in interface ChannelInboundHandler channelReadComplete in class ChannelInboundHandlerAdapter Exception Copyright © 2008–2025 The Netty Project. All rights reserved.