Package org.jboss.netty.handler.timeout
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 anIdleStateEvent
when aChannel
has not performed read, write, or both operation for a while.Supported idle states
Property Meaning readerIdleTime
an IdleStateEvent
whose state isIdleState.READER_IDLE
will be triggered when no read was performed for the specified period of time. Specify0
to disable.writerIdleTime
an IdleStateEvent
whose state isIdleState.WRITER_IDLE
will be triggered when no write was performed for the specified period of time. Specify0
to disable.allIdleTime
an IdleStateEvent
whose state isIdleState.ALL_IDLE
will be triggered when neither read nor write was performed for the specified period of time. Specify0
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 implements
TheChannelPipelineFactory
{ private finalTimer
timer; private finalChannelHandler
idleStateHandler; public MyPipelineFactory(Timer
timer) { this.timer = timer; this.idleStateHandler = newIdleStateHandler
(timer, 60, 30, 0), // timer must be shared. } publicChannelPipeline
getPipeline() { returnChannels
.pipeline( idleStateHandler, new MyHandler()); } } // Handler should handle theIdleStateEvent
triggered byIdleStateHandler
. public class MyHandler extendsIdleStateAwareChannelHandler
{@Override
public void channelIdle(ChannelHandlerContext
ctx,IdleStateEvent
e) { if (e.getState() ==IdleState
.READER_IDLE) { e.getChannel().close(); } else if (e.getState() ==IdleState
.WRITER_IDLE) { e.getChannel().write(new PingMessage()); } } }ServerBootstrap
bootstrap = ...;Timer
timer = newHashedWheelTimer
(); ... bootstrap.setPipelineFactory(new MyPipelineFactory(timer)); ...Timer
which was specified when theIdleStateHandler
is created should be stopped manually by callingreleaseExternalResources()
orTimer.stop()
when your application shuts down.- See Also:
ReadTimeoutHandler
,WriteTimeoutHandler
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private class
IdleStateHandler.AllIdleTimeoutTask
private class
IdleStateHandler.ReaderIdleTimeoutTask
private static class
IdleStateHandler.State
private class
IdleStateHandler.WriterIdleTimeoutTask
-
Nested classes/interfaces inherited from interface org.jboss.netty.channel.ChannelHandler
ChannelHandler.Sharable
-
-
Field Summary
Fields Modifier and Type Field Description (package private) long
allIdleTimeMillis
(package private) long
readerIdleTimeMillis
(package private) Timer
timer
(package private) long
writerIdleTimeMillis
-
Constructor Summary
Constructors Constructor Description IdleStateHandler(Timer timer, int readerIdleTimeSeconds, int writerIdleTimeSeconds, int allIdleTimeSeconds)
Creates a new instance.IdleStateHandler(Timer timer, long readerIdleTime, long writerIdleTime, long allIdleTime, java.util.concurrent.TimeUnit unit)
Creates a new instance.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
afterAdd(ChannelHandlerContext ctx)
void
afterRemove(ChannelHandlerContext ctx)
void
beforeAdd(ChannelHandlerContext ctx)
void
beforeRemove(ChannelHandlerContext ctx)
void
channelClosed(ChannelHandlerContext ctx, ChannelStateEvent e)
Invoked when aChannel
was closed and all its related resources were released.protected void
channelIdle(ChannelHandlerContext ctx, IdleState state, long lastActivityTimeMillis)
void
channelOpen(ChannelHandlerContext ctx, ChannelStateEvent e)
Invoked when aChannel
is open, but not bound nor connected.private static void
destroy(ChannelHandlerContext ctx)
private void
fireChannelIdle(ChannelHandlerContext ctx, IdleState state, long lastActivityTimeMillis)
long
getAllIdleTimeInMillis()
Return the allIdleTime that was given when instance this class in milliseconds.long
getReaderIdleTimeInMillis()
Return the readerIdleTime that was given when instance this class in milliseconds.long
getWriterIdleTimeInMillis()
Return the writerIdleTime that was given when instance this class in milliseconds.private void
initialize(ChannelHandlerContext ctx)
void
messageReceived(ChannelHandlerContext ctx, MessageEvent e)
Invoked when a message object (e.g:ChannelBuffer
) was received from a remote peer.void
releaseExternalResources()
Stops theTimer
which was specified in the constructor of this handler.private static IdleStateHandler.State
state(ChannelHandlerContext ctx)
void
writeComplete(ChannelHandlerContext ctx, WriteCompletionEvent e)
Invoked when something was written into aChannel
.-
Methods inherited from class org.jboss.netty.channel.SimpleChannelUpstreamHandler
channelBound, channelConnected, channelDisconnected, channelInterestChanged, channelUnbound, childChannelClosed, childChannelOpen, exceptionCaught, handleUpstream
-
-
-
-
Field Detail
-
timer
final Timer timer
-
readerIdleTimeMillis
final long readerIdleTimeMillis
-
writerIdleTimeMillis
final long writerIdleTimeMillis
-
allIdleTimeMillis
final long allIdleTimeMillis
-
-
Constructor Detail
-
IdleStateHandler
public IdleStateHandler(Timer timer, int readerIdleTimeSeconds, int writerIdleTimeSeconds, int allIdleTimeSeconds)
Creates a new instance.- Parameters:
timer
- theTimer
that is used to trigger the scheduled event. The recommendedTimer
implementation isHashedWheelTimer
.readerIdleTimeSeconds
- anIdleStateEvent
whose state isIdleState.READER_IDLE
will be triggered when no read was performed for the specified period of time. Specify0
to disable.writerIdleTimeSeconds
- anIdleStateEvent
whose state isIdleState.WRITER_IDLE
will be triggered when no write was performed for the specified period of time. Specify0
to disable.allIdleTimeSeconds
- anIdleStateEvent
whose state isIdleState.ALL_IDLE
will be triggered when neither read nor write was performed for the specified period of time. Specify0
to disable.
-
IdleStateHandler
public IdleStateHandler(Timer timer, long readerIdleTime, long writerIdleTime, long allIdleTime, java.util.concurrent.TimeUnit unit)
Creates a new instance.- Parameters:
timer
- theTimer
that is used to trigger the scheduled event. The recommendedTimer
implementation isHashedWheelTimer
.readerIdleTime
- anIdleStateEvent
whose state isIdleState.READER_IDLE
will be triggered when no read was performed for the specified period of time. Specify0
to disable.writerIdleTime
- anIdleStateEvent
whose state isIdleState.WRITER_IDLE
will be triggered when no write was performed for the specified period of time. Specify0
to disable.allIdleTime
- anIdleStateEvent
whose state isIdleState.ALL_IDLE
will be triggered when neither read nor write was performed for the specified period of time. Specify0
to disable.unit
- theTimeUnit
ofreaderIdleTime
,writeIdleTime
, andallIdleTime
-
-
Method Detail
-
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 theTimer
which was specified in the constructor of this handler. You should not call this method if theTimer
is in use by other objects.- Specified by:
releaseExternalResources
in interfaceExternalResourceReleasable
-
beforeAdd
public void beforeAdd(ChannelHandlerContext ctx) throws java.lang.Exception
- Specified by:
beforeAdd
in interfaceLifeCycleAwareChannelHandler
- Throws:
java.lang.Exception
-
afterAdd
public void afterAdd(ChannelHandlerContext ctx) throws java.lang.Exception
- Specified by:
afterAdd
in interfaceLifeCycleAwareChannelHandler
- Throws:
java.lang.Exception
-
beforeRemove
public void beforeRemove(ChannelHandlerContext ctx) throws java.lang.Exception
- Specified by:
beforeRemove
in interfaceLifeCycleAwareChannelHandler
- Throws:
java.lang.Exception
-
afterRemove
public void afterRemove(ChannelHandlerContext ctx) throws java.lang.Exception
- Specified by:
afterRemove
in interfaceLifeCycleAwareChannelHandler
- Throws:
java.lang.Exception
-
channelOpen
public void channelOpen(ChannelHandlerContext ctx, ChannelStateEvent e) throws java.lang.Exception
Description copied from class:SimpleChannelUpstreamHandler
Invoked when aChannel
is 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:
channelOpen
in classSimpleChannelUpstreamHandler
- Throws:
java.lang.Exception
-
channelClosed
public void channelClosed(ChannelHandlerContext ctx, ChannelStateEvent e) throws java.lang.Exception
Description copied from class:SimpleChannelUpstreamHandler
Invoked when aChannel
was closed and all its related resources were released.- Overrides:
channelClosed
in classSimpleChannelUpstreamHandler
- Throws:
java.lang.Exception
-
messageReceived
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws java.lang.Exception
Description copied from class:SimpleChannelUpstreamHandler
Invoked when a message object (e.g:ChannelBuffer
) was received from a remote peer.- Overrides:
messageReceived
in classSimpleChannelUpstreamHandler
- Throws:
java.lang.Exception
-
writeComplete
public void writeComplete(ChannelHandlerContext ctx, WriteCompletionEvent e) throws java.lang.Exception
Description copied from class:SimpleChannelUpstreamHandler
Invoked when something was written into aChannel
.- Overrides:
writeComplete
in classSimpleChannelUpstreamHandler
- Throws:
java.lang.Exception
-
initialize
private void initialize(ChannelHandlerContext ctx)
-
destroy
private static void destroy(ChannelHandlerContext ctx)
-
state
private static IdleStateHandler.State state(ChannelHandlerContext ctx)
-
fireChannelIdle
private void fireChannelIdle(ChannelHandlerContext ctx, IdleState state, long lastActivityTimeMillis)
-
channelIdle
protected void channelIdle(ChannelHandlerContext ctx, IdleState state, long lastActivityTimeMillis) throws java.lang.Exception
- Throws:
java.lang.Exception
-
-