public class IdleStateHandler extends ChannelDuplexHandler
Channel
暂时未执行读取,写入操作或两者操作时触发IdleStateEvent
。
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 MyChannelInitializer extends ChannelInitializer
<Channel
> {
@Override
public void initChannel(Channel
channel) {
channel.pipeline().addLast("idleStateHandler", new IdleStateHandler
(60, 30, 0));
channel.pipeline().addLast("myHandler", new MyHandler());
}
}
// Handler should handle the IdleStateEvent
triggered by IdleStateHandler
.
public class MyHandler extends ChannelDuplexHandler
{
@Override
public void userEventTriggered(ChannelHandlerContext
ctx, Object
evt) throws 异常
{
if (evt instanceof IdleStateEvent
) {
IdleStateEvent
e = (IdleStateEvent
) evt;
if (e.state() == IdleState
.READER_IDLE) {
ctx.close();
} else if (e.state() == IdleState
.WRITER_IDLE) {
ctx.writeAndFlush(new PingMessage());
}
}
}
}
ServerBootstrap
bootstrap = ...;
...
bootstrap.childHandler(new MyChannelInitializer());
...
ChannelHandler.Sharable
Constructor and Description |
---|
IdleStateHandler(boolean observeOutput, long readerIdleTime, long writerIdleTime, long allIdleTime, java.util.concurrent.TimeUnit unit)
创建一个新的实例 IdleStateEvent 。
|
IdleStateHandler(int readerIdleTimeSeconds, int writerIdleTimeSeconds, int allIdleTimeSeconds)
创建一个新的实例 IdleStateEvent 。
|
IdleStateHandler(long readerIdleTime, long writerIdleTime, long allIdleTime, java.util.concurrent.TimeUnit unit) |
Modifier and Type | Method and Description |
---|---|
void |
channelActive(ChannelHandlerContext ctx)
|
protected void |
channelIdle(ChannelHandlerContext ctx, IdleStateEvent evt)
当应当解雇 IdleStateEvent 时被调用。
|
void |
channelInactive(ChannelHandlerContext ctx)
|
void |
channelRead(ChannelHandlerContext ctx, java.lang.Object msg)
|
void |
channelReadComplete(ChannelHandlerContext ctx)
|
void |
channelRegistered(ChannelHandlerContext ctx)
|
long |
getAllIdleTimeInMillis()
以毫秒为单位返回实例此类时给出的allIdleTime。
|
long |
getReaderIdleTimeInMillis()
返回实例此类以毫秒为单位给出的readerIdleTime。
|
long |
getWriterIdleTimeInMillis()
以毫秒为单位返回实例此类的writerIdleTime。
|
void |
handlerAdded(ChannelHandlerContext ctx)
子类可以忽略这个方法。
|
void |
handlerRemoved(ChannelHandlerContext ctx)
子类可以忽略这个方法。
|
protected IdleStateEvent |
newIdleStateEvent(IdleState state, boolean first)
返回 IdleStateEvent 。
|
void |
write(ChannelHandlerContext ctx, java.lang.Object msg, ChannelPromise promise)
|
bind, close, connect, deregister, disconnect, flush, read
channelUnregistered, channelWritabilityChanged, exceptionCaught, userEventTriggered
ensureNotSharable, isSharable
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
exceptionCaught
public IdleStateHandler(int readerIdleTimeSeconds, int writerIdleTimeSeconds, int allIdleTimeSeconds)
IdleStateEvent
。
readerIdleTimeSeconds
-一个IdleStateEvent
,其状态IdleState.READER_IDLE
时的指定时间段没有执行读操作将被触发。
指定0
禁用。
writerIdleTimeSeconds
-一个IdleStateEvent
,其状态IdleState.WRITER_IDLE
时的指定时间段没有执行写操作将被触发。
指定0
禁用。
allIdleTimeSeconds
- 当状态为IdleState.ALL_IDLE
的状态为IdleState.ALL_IDLE
时,将在指定的时间段内未执行读取或写入时触发。
指定0
禁用。
public IdleStateHandler(long readerIdleTime, long writerIdleTime, long allIdleTime, java.util.concurrent.TimeUnit unit)
public IdleStateHandler(boolean observeOutput, long readerIdleTime, long writerIdleTime, long allIdleTime, java.util.concurrent.TimeUnit unit)
IdleStateEvent
。
observeOutput
- 在评估写入闲置时是否应该考虑bytes
的消耗。
默认值是false
。
readerIdleTime
-一个IdleStateEvent
,其状态IdleState.READER_IDLE
时的指定时间段没有执行读操作将被触发。
指定0
禁用。
writerIdleTime
-一个IdleStateEvent
,其状态IdleState.WRITER_IDLE
时的指定时间段没有执行写操作将被触发。
指定0
禁用。
allIdleTime
- 一个IdleStateEvent
的状态为IdleState.ALL_IDLE
将在指定的时间段内未执行读取或写入操作时触发。
指定0
禁用。
unit
-在
TimeUnit
的
readerIdleTime
,
writeIdleTime
和
allIdleTime
public long getReaderIdleTimeInMillis()
public long getWriterIdleTimeInMillis()
public long getAllIdleTimeInMillis()
public void handlerAdded(ChannelHandlerContext ctx) throws java.lang.Exception
ChannelHandlerAdapter
handlerAdded
接口
ChannelHandler
handlerAdded
在课堂上
ChannelHandlerAdapter
java.lang.Exception
public void handlerRemoved(ChannelHandlerContext ctx) throws java.lang.Exception
ChannelHandlerAdapter
handlerRemoved
在界面
ChannelHandler
handlerRemoved
在课堂上
ChannelHandlerAdapter
java.lang.Exception
public void channelRegistered(ChannelHandlerContext ctx) throws java.lang.Exception
ChannelInboundHandlerAdapter
ChannelHandlerContext.fireChannelRegistered()
转发到ChannelPipeline
中的下一个ChannelInboundHandler
。
子类可以重写此方法来更改行为。
channelRegistered
接口
ChannelInboundHandler
channelRegistered
在课堂上
ChannelInboundHandlerAdapter
java.lang.Exception
public void channelActive(ChannelHandlerContext ctx) throws java.lang.Exception
ChannelInboundHandlerAdapter
ChannelHandlerContext.fireChannelActive()
转发到ChannelPipeline
中的下一个ChannelInboundHandler
。
子类可以重写此方法来更改行为。
channelActive
,界面
ChannelInboundHandler
channelActive
在课堂上
ChannelInboundHandlerAdapter
java.lang.Exception
public void channelInactive(ChannelHandlerContext ctx) throws java.lang.Exception
ChannelInboundHandlerAdapter
ChannelHandlerContext.fireChannelInactive()
转发到ChannelPipeline
中的下一个ChannelInboundHandler
。
子类可以重写此方法来更改行为。
channelInactive
在界面
ChannelInboundHandler
channelInactive
在课堂上
ChannelInboundHandlerAdapter
java.lang.Exception
public void channelRead(ChannelHandlerContext ctx, java.lang.Object msg) throws java.lang.Exception
ChannelInboundHandlerAdapter
ChannelHandlerContext.fireChannelRead(Object)
转发到ChannelPipeline
中的下一个ChannelInboundHandler
。
子类可以重写此方法来更改行为。
channelRead
在界面
ChannelInboundHandler
channelRead
在课堂上
ChannelInboundHandlerAdapter
java.lang.Exception
public void channelReadComplete(ChannelHandlerContext ctx) throws java.lang.Exception
ChannelInboundHandlerAdapter
ChannelHandlerContext.fireChannelReadComplete()
转发到ChannelPipeline
中的下一个ChannelInboundHandler
。
子类可以重写此方法来更改行为。
channelReadComplete
在界面
ChannelInboundHandler
channelReadComplete
在课堂上
ChannelInboundHandlerAdapter
java.lang.Exception
public void write(ChannelHandlerContext ctx, java.lang.Object msg, ChannelPromise promise) throws java.lang.Exception
ChannelDuplexHandler
ChannelOutboundInvoker.write(Object, ChannelPromise)
转发到ChannelPipeline
中的下一个ChannelOutboundHandler
。
子类可以重写此方法来更改行为。
write
,界面
ChannelOutboundHandler
write
在课堂上
ChannelDuplexHandler
ctx
- 为其写入操作的ChannelHandlerContext
msg
- 写信息
promise
- 在操作完成后通知ChannelPromise
java.lang.Exception
- 发生错误时抛出
protected void channelIdle(ChannelHandlerContext ctx, IdleStateEvent evt) throws java.lang.Exception
IdleStateEvent
应该被解雇时被调用。
这个实现调用ChannelHandlerContext.fireUserEventTriggered(Object)
。
java.lang.Exception
protected IdleStateEvent newIdleStateEvent(IdleState state, boolean first)
IdleStateEvent
.
Copyright © 2008–2018 The Netty Project. All rights reserved.