@ChannelHandler.Sharable public class IdleStateHandler extends SimpleChannelUpstreamHandler implements LifeCycleAwareChannelHandler, ExternalResourceReleasable
IdleStateEvent
when a Channel
has not performed
read, write, or both operation for a while.
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 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 the IdleStateHandler
is
created should be stopped manually by calling releaseExternalResources()
or Timer.stop()
when your application shuts down.ChannelHandler.Sharable
构造器和说明 |
---|
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.
|
限定符和类型 | 方法和说明 |
---|---|
void |
afterAdd(ChannelHandlerContext ctx) |
void |
afterRemove(ChannelHandlerContext ctx) |
void |
beforeAdd(ChannelHandlerContext ctx) |
void |
beforeRemove(ChannelHandlerContext ctx) |
void |
channelClosed(ChannelHandlerContext ctx,
ChannelStateEvent e)
Invoked when a
Channel 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 a
Channel is open, but not bound nor connected. |
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.
|
void |
messageReceived(ChannelHandlerContext ctx,
MessageEvent e)
Invoked when a message object (e.g:
ChannelBuffer ) was received
from a remote peer. |
void |
releaseExternalResources()
Stops the
Timer which was specified in the constructor of this
handler. |
void |
writeComplete(ChannelHandlerContext ctx,
WriteCompletionEvent e)
Invoked when something was written into a
Channel . |
channelBound, channelConnected, channelDisconnected, channelInterestChanged, channelUnbound, childChannelClosed, childChannelOpen, exceptionCaught, handleUpstream
public IdleStateHandler(Timer timer, int readerIdleTimeSeconds, int writerIdleTimeSeconds, int allIdleTimeSeconds)
timer
- the Timer
that is used to trigger the scheduled event.
The recommended Timer
implementation is HashedWheelTimer
.readerIdleTimeSeconds
- 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.writerIdleTimeSeconds
- 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.allIdleTimeSeconds
- 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.public IdleStateHandler(Timer timer, long readerIdleTime, long writerIdleTime, long allIdleTime, java.util.concurrent.TimeUnit unit)
timer
- the Timer
that is used to trigger the scheduled event.
The recommended Timer
implementation is HashedWheelTimer
.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.unit
- the TimeUnit
of readerIdleTime
,
writeIdleTime
, and allIdleTime
public long getReaderIdleTimeInMillis()
public long getWriterIdleTimeInMillis()
public long getAllIdleTimeInMillis()
public void releaseExternalResources()
public void beforeAdd(ChannelHandlerContext ctx) throws java.lang.Exception
beforeAdd
在接口中 LifeCycleAwareChannelHandler
java.lang.Exception
public void afterAdd(ChannelHandlerContext ctx) throws java.lang.Exception
afterAdd
在接口中 LifeCycleAwareChannelHandler
java.lang.Exception
public void beforeRemove(ChannelHandlerContext ctx) throws java.lang.Exception
beforeRemove
在接口中 LifeCycleAwareChannelHandler
java.lang.Exception
public void afterRemove(ChannelHandlerContext ctx) throws java.lang.Exception
afterRemove
在接口中 LifeCycleAwareChannelHandler
java.lang.Exception
public void channelOpen(ChannelHandlerContext ctx, ChannelStateEvent e) throws java.lang.Exception
SimpleChannelUpstreamHandler
Channel
is open, but not bound nor connected.
channelOpen
在类中 SimpleChannelUpstreamHandler
java.lang.Exception
public void channelClosed(ChannelHandlerContext ctx, ChannelStateEvent e) throws java.lang.Exception
SimpleChannelUpstreamHandler
Channel
was closed and all its related resources
were released.channelClosed
在类中 SimpleChannelUpstreamHandler
java.lang.Exception
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws java.lang.Exception
SimpleChannelUpstreamHandler
ChannelBuffer
) was received
from a remote peer.messageReceived
在类中 SimpleChannelUpstreamHandler
java.lang.Exception
public void writeComplete(ChannelHandlerContext ctx, WriteCompletionEvent e) throws java.lang.Exception
SimpleChannelUpstreamHandler
Channel
.writeComplete
在类中 SimpleChannelUpstreamHandler
java.lang.Exception
protected void channelIdle(ChannelHandlerContext ctx, IdleState state, long lastActivityTimeMillis) throws java.lang.Exception
java.lang.Exception