需求

  • 当客户端与服务端的连接建立后,他们之间就可以进行通信了。但是,若某客户端与服务端长时间没有进行通信,而Channel却被长时间占用,就会形成资源浪费。Netty提供了专门用于进行读写操作空闲检测的处理器可供使用。

开发

  • 需要处理的一端(可以是服务端可以是客户端)添加new IdleStateHandler()来设置读写超时的时间
  • Netty中包含了用于处理空闲检测的处理器,直接使用即可
  1. //用于监听channel的其他事件
  2. public class SomeServerHandler extends ChannelInboundHandlerAdapter{
  3. @Override
  4. public void userEventTriggered(ChannelHandlerContext ctx,Object evt) throws Exception{
  5. if(evt instanceof IdleStateEvent){
  6. IdleStateEvent event = (IdleStateEvent)evt;
  7. String eventDes = null;
  8. switch(event.state()){
  9. case READER_IDLE : eventDes = "读空闲超时";break;
  10. case WRITER_IDLE : eventDes = "写空闲超时";break;
  11. case ALL_IDLE : eventDes = "读和写空闲都超时";break;
  12. }
  13. }
  14. System.out.println(eventDes);
  15. ctx.close();
  16. }
  17. }