Class IdleStateHandler
java.lang.Object
org.jboss.netty.channel.SimpleChannelUpstreamHandler
org.jboss.netty.handler.timeout.IdleStateHandler
- All Implemented Interfaces:
ChannelHandler, ChannelUpstreamHandler, LifeCycleAwareChannelHandler, ExternalResourceReleasable
@Sharable
public class IdleStateHandler
extends SimpleChannelUpstreamHandler
implements LifeCycleAwareChannelHandler, ExternalResourceReleasable
Triggers an
IdleStateEvent when a Channel has not performed
read, write, or both operation for a while.
Supported idle states
| Property | Meaning |
|---|---|
readerIdleTime |
an IdleStateEvent whose state is IdleState.READER_IDLE
will be triggered when no read was performed for the specified period of
time. Specify 0 to disable. |
writerIdleTime |
an IdleStateEvent whose state is IdleState.WRITER_IDLE
will be triggered when no write was performed for the specified period of
time. Specify 0 to disable. |
allIdleTime |
an IdleStateEvent whose state is IdleState.ALL_IDLE
will be triggered when neither read nor write was performed for the
specified period of time. Specify 0 to disable. |
// An example that sends a ping message when there is no outbound traffic // for 30 seconds. The connection is closed when there is no inbound traffic // for 60 seconds. public class MyPipelineFactory implementsTheChannelPipelineFactory{ private finalTimertimer; private finalChannelHandleridleStateHandler; public MyPipelineFactory(Timertimer) { this.timer = timer; this.idleStateHandler = newIdleStateHandler(timer, 60, 30, 0), // timer must be shared. } publicChannelPipelinegetPipeline() { returnChannels.pipeline( idleStateHandler, new MyHandler()); } } // Handler should handle theIdleStateEventtriggered byIdleStateHandler. public class MyHandler extendsIdleStateAwareChannelHandler{@Overridepublic void channelIdle(ChannelHandlerContextctx,IdleStateEvente) { if (e.getState() ==IdleState.READER_IDLE) { e.getChannel().close(); } else if (e.getState() ==IdleState.WRITER_IDLE) { e.getChannel().write(new PingMessage()); } } }ServerBootstrapbootstrap = ...;Timertimer = newHashedWheelTimer(); ... bootstrap.setPipelineFactory(new MyPipelineFactory(timer)); ...
Timer which was specified when the IdleStateHandler is
created should be stopped manually by calling releaseExternalResources()
or Timer.stop() when your application shuts down.- See Also:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprivate final classprivate final classprivate static final classprivate final classNested classes/interfaces inherited from interface ChannelHandler
ChannelHandler.Sharable -
Field Summary
FieldsModifier and TypeFieldDescription(package private) final long(package private) final long(package private) final Timer(package private) final long -
Constructor Summary
ConstructorsConstructorDescriptionIdleStateHandler(Timer timer, int readerIdleTimeSeconds, int writerIdleTimeSeconds, int allIdleTimeSeconds) Creates a new instance.IdleStateHandler(Timer timer, long readerIdleTime, long writerIdleTime, long allIdleTime, TimeUnit unit) Creates a new instance. -
Method Summary
Modifier and TypeMethodDescriptionvoidvoidvoidvoidvoidInvoked when aChannelwas closed and all its related resources were released.protected voidchannelIdle(ChannelHandlerContext ctx, IdleState state, long lastActivityTimeMillis) voidInvoked when aChannelis open, but not bound nor connected.private static voidprivate voidfireChannelIdle(ChannelHandlerContext ctx, IdleState state, long lastActivityTimeMillis) longReturn the allIdleTime that was given when instance this class in milliseconds.longReturn the readerIdleTime that was given when instance this class in milliseconds.longReturn the writerIdleTime that was given when instance this class in milliseconds.private voidvoidInvoked when a message object (e.g:ChannelBuffer) was received from a remote peer.voidStops theTimerwhich was specified in the constructor of this handler.private static IdleStateHandler.StatevoidInvoked when something was written into aChannel.Methods inherited from class SimpleChannelUpstreamHandler
channelBound, channelConnected, channelDisconnected, channelInterestChanged, channelUnbound, childChannelClosed, childChannelOpen, exceptionCaught, handleUpstream
-
Field Details
-
timer
-
readerIdleTimeMillis
final long readerIdleTimeMillis -
writerIdleTimeMillis
final long writerIdleTimeMillis -
allIdleTimeMillis
final long allIdleTimeMillis
-
-
Constructor Details
-
IdleStateHandler
public IdleStateHandler(Timer timer, int readerIdleTimeSeconds, int writerIdleTimeSeconds, int allIdleTimeSeconds) Creates a new instance.- Parameters:
timer- theTimerthat is used to trigger the scheduled event. The recommendedTimerimplementation isHashedWheelTimer.readerIdleTimeSeconds- anIdleStateEventwhose state isIdleState.READER_IDLEwill be triggered when no read was performed for the specified period of time. Specify0to disable.writerIdleTimeSeconds- anIdleStateEventwhose state isIdleState.WRITER_IDLEwill be triggered when no write was performed for the specified period of time. Specify0to disable.allIdleTimeSeconds- anIdleStateEventwhose state isIdleState.ALL_IDLEwill be triggered when neither read nor write was performed for the specified period of time. Specify0to disable.
-
IdleStateHandler
public IdleStateHandler(Timer timer, long readerIdleTime, long writerIdleTime, long allIdleTime, TimeUnit unit) Creates a new instance.- Parameters:
timer- theTimerthat is used to trigger the scheduled event. The recommendedTimerimplementation isHashedWheelTimer.readerIdleTime- anIdleStateEventwhose state isIdleState.READER_IDLEwill be triggered when no read was performed for the specified period of time. Specify0to disable.writerIdleTime- anIdleStateEventwhose state isIdleState.WRITER_IDLEwill be triggered when no write was performed for the specified period of time. Specify0to disable.allIdleTime- anIdleStateEventwhose state isIdleState.ALL_IDLEwill be triggered when neither read nor write was performed for the specified period of time. Specify0to disable.unit- theTimeUnitofreaderIdleTime,writeIdleTime, andallIdleTime
-
-
Method Details
-
getReaderIdleTimeInMillis
public long getReaderIdleTimeInMillis()Return the readerIdleTime that was given when instance this class in milliseconds. -
getWriterIdleTimeInMillis
public long getWriterIdleTimeInMillis()Return the writerIdleTime that was given when instance this class in milliseconds. -
getAllIdleTimeInMillis
public long getAllIdleTimeInMillis()Return the allIdleTime that was given when instance this class in milliseconds. -
releaseExternalResources
public void releaseExternalResources()Stops theTimerwhich was specified in the constructor of this handler. You should not call this method if theTimeris in use by other objects.- Specified by:
releaseExternalResourcesin interfaceExternalResourceReleasable
-
beforeAdd
- Specified by:
beforeAddin interfaceLifeCycleAwareChannelHandler- Throws:
Exception
-
afterAdd
- Specified by:
afterAddin interfaceLifeCycleAwareChannelHandler- Throws:
Exception
-
beforeRemove
- Specified by:
beforeRemovein interfaceLifeCycleAwareChannelHandler- Throws:
Exception
-
afterRemove
- Specified by:
afterRemovein interfaceLifeCycleAwareChannelHandler- Throws:
Exception
-
channelOpen
Description copied from class:SimpleChannelUpstreamHandlerInvoked when aChannelis open, but not bound nor connected.
Be aware that this event is fired from within the I/O thread. You should never execute any heavy operation in there as it will block the dispatching to other workers!- Overrides:
channelOpenin classSimpleChannelUpstreamHandler- Throws:
Exception
-
channelClosed
Description copied from class:SimpleChannelUpstreamHandlerInvoked when aChannelwas closed and all its related resources were released.- Overrides:
channelClosedin classSimpleChannelUpstreamHandler- Throws:
Exception
-
messageReceived
Description copied from class:SimpleChannelUpstreamHandlerInvoked when a message object (e.g:ChannelBuffer) was received from a remote peer.- Overrides:
messageReceivedin classSimpleChannelUpstreamHandler- Throws:
Exception
-
writeComplete
Description copied from class:SimpleChannelUpstreamHandlerInvoked when something was written into aChannel.- Overrides:
writeCompletein classSimpleChannelUpstreamHandler- Throws:
Exception
-
initialize
-
destroy
-
state
-
fireChannelIdle
private void fireChannelIdle(ChannelHandlerContext ctx, IdleState state, long lastActivityTimeMillis) -
channelIdle
protected void channelIdle(ChannelHandlerContext ctx, IdleState state, long lastActivityTimeMillis) throws Exception - Throws:
Exception
-