一、创建服务端

1、MyServer 类

public class MyServer {
public static void main(String[] args) throws Exception{
EventLoopGroup bossGroup = new NioEventLoopGroup();
EventLoopGroup workerGroup = new NioEventLoopGroup();
try{ ServerBootstrap serverBootstrap = new ServerBootstrap();
serverBootstrap.group(bossGroup,workerGroup).channel(NioServerSocketChannel.class)
.handler(new LoggingHandler(LogLevel.INFO)) //增加日志处理器
.childHandler(new MyServerInitializer()); ChannelFuture channelFuture = serverBootstrap.bind(8899).sync();
channelFuture.channel().closeFuture().sync();
}finally {
bossGroup.shutdownGracefully();
workerGroup.shutdownGracefully();
}
}
}

  增加日志处理器

2、MyServerInitializer

public class MyServerInitializer extends ChannelInitializer<SocketChannel>{

    protected void initChannel(SocketChannel socketChannel) throws Exception {
ChannelPipeline pipeline = socketChannel.pipeline();
pipeline.addLast(new IdleStateHandler(5, 7, 10, TimeUnit.SECONDS));
pipeline.addLast(new MyServerHandle());
}
}

  5秒钟没有读事件

  7秒钟没有写事件

  10秒钟没有读写事件

3、处理器MyServerHandle

public class MyServerHandle extends ChannelInboundHandlerAdapter  {

    @Override
public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {
if(evt instanceof IdleStateEvent){
IdleStateEvent event = (IdleStateEvent)evt; String eventType = null; switch (event.state()){
case READER_IDLE:
eventType = "读空闲";
break;
case WRITER_IDLE:
eventType = "写空闲";
break;
case ALL_IDLE:
eventType = "读写空闲";
break;
} CommonUtil.println(ctx.channel().remoteAddress() + "超时事件: " + eventType);
//关闭连接
ctx.channel().close();
}
}
}

  

二、客户端代码同上一篇一致

三、测试

启动服务端和客户端

1、读空闲

可以发现,5秒钟没有读到消息,将触发超时事件: 读空闲

2、写空闲

客户端一直写

服务端没有写,7秒所有触发写空闲事件

3、读写空闲

把读写空闲事件时间改为3秒

重启服务端和客户端

最新文章

  1. 深入探讨:标签(Tag)的各种设计方案
  2. 一眼看懂KMP匹配算法
  3. MySQL主从数据库同步延迟问题解决(转)
  4. Java Hour 67 Java Collection API
  5. 利用JDK的中Proxy动态代理实现Spring的AOP技术
  6. Java--常用类summary(二)
  7. [Java] Collections - 源代码学习笔记
  8. ASP.NET导出EXCEl方法使用COM.EXCEL不使用EXCEl对象
  9. 探索Android中的Parcel机制(上)
  10. 去除scons构建动态库的前缀lib
  11. .NET基础——数组
  12. awk程序设计语言之-awk基础
  13. 理解C++ lvalue与rvalue
  14. java7增强的try语句关闭资源
  15. 基于RTKLIB构建高并发通信测试工具
  16. python实现博客自动刷点击脚本
  17. 文本分类实战(二)—— textCNN 模型
  18. PHP——laravel之DB类-&gt;查询
  19. mysql explain执行详解
  20. Codeforces 1016G Appropriate Team 数论 FWT

热门文章

  1. git指令集合
  2. java验证邮件正则
  3. 爬虫之scrapy框架应用selenium
  4. ireport(1.2.7)的IllegalAccessError异常
  5. Flink使用(三)——记一次Flink Session任务反复重启
  6. linux下给U盘分区&amp;制作文件系统
  7. Local CubeMap实现玻璃折射
  8. failed to recover intents
  9. vue中引入.svg图标,使用iconfont图标库
  10. 数据库连接的配置文件activation节点