org.jboss.netty.handler.timeout
类 IdleStateHandler

java.lang.Object
  继承者 org.jboss.netty.channel.SimpleChannelUpstreamHandler
      继承者 org.jboss.netty.handler.timeout.IdleStateHandler
所有已实现的接口:
ChannelHandler, ChannelUpstreamHandler, LifeCycleAwareChannelHandler, ExternalResourceReleasable

public class IdleStateHandler
extends SimpleChannelUpstreamHandler
implements LifeCycleAwareChannelHandler, ExternalResourceReleasable

当一个Channel暂时不执行读、写或两者时触发一个IdleStateEvent.

支持的空闲状态

属性 意思
readerIdleTime 当指定的时间周期内没有读操作,一个状态为IdleState.READER_IDLEIdleStateEvent 被触发.设置0表示禁止.
writerIdleTime 当指定的时间周期内没有写操作,一个状态为IdleState.WRITER_IDLEIdleStateEvent 被触发. 设置0表示禁止.
allIdleTime 当指定的时间周期内没有读和写操作,一个状态为IdleState.ALL_IDLEIdleStateEvent 被触发. 设置0表示禁止.
 // 下面例子表示当30秒没有出站通信时发送Ping消息,60秒没有入站通信时关闭连接.
 
 public class MyPipelineFactory implements ChannelPipelineFactory {
 
     private final Timer timer;
 
     public MyPipelineFactory(Timer timer) {
         this.timer = timer;
     }
 
     public ChannelPipeline getPipeline() {
         return Channels.pipeline(
             new IdleStateHandler(timer, 60, 30, 0), // timer must be shared.
             new MyHandler());
     }
 }
 
 // 处理器会处理由IdleStateHandler触发的IdleStateEvent.
 public class MyHandler extends IdleStateAwareChannelHandler {
 
     @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 = new HashedWheelTimer();
 ...
 bootstrap.setPipelineFactory(new MyPipelineFactory(timer));
 ...
 
ReadTimeoutHandler被创建时Timer会被指定.当你的应用程序关闭,需要手工调用 releaseExternalResources()Timer.stop()关闭.

另请参见:
ReadTimeoutHandler, WriteTimeoutHandler

嵌套类摘要
 
从接口 org.jboss.netty.channel.ChannelHandler 继承的嵌套类/接口
ChannelHandler.Sharable
 
构造方法摘要
IdleStateHandler(Timer timer, int readerIdleTimeSeconds, int writerIdleTimeSeconds, int allIdleTimeSeconds)
          创建一个实例.
IdleStateHandler(Timer timer, long readerIdleTime, long writerIdleTime, long allIdleTime, java.util.concurrent.TimeUnit unit)
          创建一个实例.
 
方法摘要
 void afterAdd(ChannelHandlerContext ctx)
           
 void afterRemove(ChannelHandlerContext ctx)
           
 void beforeAdd(ChannelHandlerContext ctx)
           
 void beforeRemove(ChannelHandlerContext ctx)
           
 void channelClosed(ChannelHandlerContext ctx, ChannelStateEvent e)
          当一个Channel被关闭且它所有关联的资源被释放时调用.
 void channelOpen(ChannelHandlerContext ctx, ChannelStateEvent e)
          当一个Channel打开,但还没有绑定和连接时被调用.
 void messageReceived(ChannelHandlerContext ctx, MessageEvent e)
          当一个从远端发来的消息对象(如: ChannelBuffer)被接收时调用.
 void releaseExternalResources()
          停止该处理器在构造时指定的Timer.当该Timer被其他对象使用 ,你不能调用该方法.
 void writeComplete(ChannelHandlerContext ctx, WriteCompletionEvent e)
          当有东西被写到一个Channel时调用.
 
从类 org.jboss.netty.channel.SimpleChannelUpstreamHandler 继承的方法
channelBound, channelConnected, channelDisconnected, channelInterestChanged, channelUnbound, childChannelClosed, childChannelOpen, exceptionCaught, handleUpstream
 
从类 java.lang.Object 继承的方法
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

构造方法详细信息

IdleStateHandler

public IdleStateHandler(Timer timer,
                        int readerIdleTimeSeconds,
                        int writerIdleTimeSeconds,
                        int allIdleTimeSeconds)
创建一个实例.

参数:
timer - Timer 常常被用于触发计时事件.推荐的Timer实现是 HashedWheelTimer.
readerIdleTimeSeconds - 当指定的时间周期内没有读操作,一个状态为IdleState.READER_IDLEIdleStateEvent 被触发.设置0表示禁止.
writerIdleTimeSeconds - 当指定的时间周期内没有写操作,一个状态为IdleState.WRITER_IDLEIdleStateEvent 被触发. 设置0表示禁止.
allIdleTimeSeconds - 当指定的时间周期内没有读和写操作,一个状态为IdleState.ALL_IDLEIdleStateEvent 被触发. 设置0表示禁止.

IdleStateHandler

public IdleStateHandler(Timer timer,
                        long readerIdleTime,
                        long writerIdleTime,
                        long allIdleTime,
                        java.util.concurrent.TimeUnit unit)
创建一个实例.

参数:
timer - Timer 常常被用于触发计时事件.推荐的Timer实现是 HashedWheelTimer.
readerIdleTime - 当指定的时间周期内没有读操作,一个状态为IdleState.READER_IDLEIdleStateEvent 被触发.设置0表示禁止.
writerIdleTime - 当指定的时间周期内没有写操作,一个状态为IdleState.WRITER_IDLEIdleStateEvent 被触发. 设置0表示禁止.
allIdleTime - 当指定的时间周期内没有读和写操作,一个状态为IdleState.ALL_IDLEIdleStateEvent 被触发. 设置0表示禁止.
unit - readerIdleTime, writeIdleTimeallIdleTimeTimeUnit.
方法详细信息

releaseExternalResources

public void releaseExternalResources()
停止该处理器在构造时指定的Timer.当该Timer被其他对象使用 ,你不能调用该方法.

指定者:
接口 ExternalResourceReleasable 中的 releaseExternalResources

beforeAdd

public void beforeAdd(ChannelHandlerContext ctx)
               throws java.lang.Exception
指定者:
接口 LifeCycleAwareChannelHandler 中的 beforeAdd
抛出:
java.lang.Exception

afterAdd

public void afterAdd(ChannelHandlerContext ctx)
              throws java.lang.Exception
指定者:
接口 LifeCycleAwareChannelHandler 中的 afterAdd
抛出:
java.lang.Exception

beforeRemove

public void beforeRemove(ChannelHandlerContext ctx)
                  throws java.lang.Exception
指定者:
接口 LifeCycleAwareChannelHandler 中的 beforeRemove
抛出:
java.lang.Exception

afterRemove

public void afterRemove(ChannelHandlerContext ctx)
                 throws java.lang.Exception
指定者:
接口 LifeCycleAwareChannelHandler 中的 afterRemove
抛出:
java.lang.Exception

channelOpen

public void channelOpen(ChannelHandlerContext ctx,
                        ChannelStateEvent e)
                 throws java.lang.Exception
从类 SimpleChannelUpstreamHandler 复制的描述
当一个Channel打开,但还没有绑定和连接时被调用.

覆盖:
SimpleChannelUpstreamHandler 中的 channelOpen
抛出:
java.lang.Exception

channelClosed

public void channelClosed(ChannelHandlerContext ctx,
                          ChannelStateEvent e)
                   throws java.lang.Exception
从类 SimpleChannelUpstreamHandler 复制的描述
当一个Channel被关闭且它所有关联的资源被释放时调用.

覆盖:
SimpleChannelUpstreamHandler 中的 channelClosed
抛出:
java.lang.Exception

messageReceived

public void messageReceived(ChannelHandlerContext ctx,
                            MessageEvent e)
                     throws java.lang.Exception
从类 SimpleChannelUpstreamHandler 复制的描述
当一个从远端发来的消息对象(如: ChannelBuffer)被接收时调用.

覆盖:
SimpleChannelUpstreamHandler 中的 messageReceived
抛出:
java.lang.Exception

writeComplete

public void writeComplete(ChannelHandlerContext ctx,
                          WriteCompletionEvent e)
                   throws java.lang.Exception
从类 SimpleChannelUpstreamHandler 复制的描述
当有东西被写到一个Channel时调用.

覆盖:
SimpleChannelUpstreamHandler 中的 writeComplete
抛出:
java.lang.Exception