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, readchannelUnregistered, channelWritabilityChanged, exceptionCaught, userEventTriggeredensureNotSharable, isSharableclone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitexceptionCaughtpublic 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.