检测空闲连接和超时是为了及时释放资源。常见的方法是发送消息来测试一个不活跃的连接,通常称为“心跳”。

  Netty 提供了几个 ChannelHandler 来实现此目的,如下:

  

  下面是 IdleStateHandler 的一个简单使用:

 1 /**
 2  * 空闲连接
 3  * 当超过60s没有数据收到时,就发送心跳到远端
 4  * 如果没有回应,关闭连接
 5  */
 6 public class IdleStateHandlerInitializer extends ChannelInitializer<Channel> {
 7
 8     @Override
 9     protected void initChannel(Channel ch) throws Exception {
10         ChannelPipeline pipeline = ch.pipeline();
11         // 若60s没有收到消息,调用userEventTriggered方法
12         pipeline.addLast(new IdleStateHandler(0, 0, 60, TimeUnit.SECONDS));
13         pipeline.addLast(new HeartBeatHandle());
14     }
15
16     public static final class HeartBeatHandle extends ChannelInboundHandlerAdapter {
17         private static final ByteBuf HEARTBEAT_SEQUENCE = Unpooled.unreleasableBuffer(
18                 Unpooled.copiedBuffer("HEARTBEAT", CharsetUtil.UTF_8));
19
20         @Override
21         public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {
22             if(evt instanceof IdleStateEvent) {
23                 // 发送心跳到远端
24                 ctx.writeAndFlush(HEARTBEAT_SEQUENCE.duplicate())
25                     .addListener(ChannelFutureListener.CLOSE_ON_FAILURE);    // 关闭连接
26             } else {
27                 // 传递给下一个处理程序
28                 super.userEventTriggered(ctx, evt);
29             }
30         }
31     }
32
33 }

转载于:https://www.cnblogs.com/coderJiebao/p/Netty09.html

Netty入门(九)空闲连接以及超时相关推荐

  1. postgresql 连接超时_关于超时:如何自动关闭PostgreSQL中的空闲连接?

    有些客户端连接到我们的postgresql数据库,但保持连接打开. 是否有可能告诉Postgresql在一定量的不活动后关闭这些连接? TL; DR IF you're using a Postgre ...

  2. Netty入门与实战:仿写微信IM即时通讯系统

    转载自:Netty入门与实战:仿写微信IM即时通讯系统 Netty是互联网中间件领域使用最广泛最核心的网络通信框架,几乎所有互联网中间件或者大数据领域均离不开Netty,掌握Netty是作为初中级工程 ...

  3. Netty入门与实战教程

    前言:都说Netty是Java程序员必须要掌握的一项技能,带着不止要知其然还要知其所以然的目的,在慕课上找了一个学习Netty源码的教程,看了几章后着实有点懵逼.虽然用过Netty,并且在自己的个人网 ...

  4. 网络编程懒人入门(九):通俗讲解,有了IP地址,为何还要用MAC地址?

    1.前言 标题虽然是为了解释有了 IP 地址,为什么还要用 MAC 地址,但是本文的重点在于理解为什么要有 IP 这样的东西.本文对读者的定位是知道 MAC 地址是什么,IP 地址是什么. (本文同步 ...

  5. 超详细Netty入门

    思维导图 前言 本文主要讲述Netty框架的一些特性以及重要组件,希望看完之后能对Netty框架有一个比较直观的感受,希望能帮助读者快速入门Netty,减少一些弯路. 一.Netty概述 官方的介绍: ...

  6. Lettuce连接池超时问题简单记录

    使用Lettuce连接池,隔一段时间不连,再去连,就出现超时问题 问题分析定位 解决方案 方案一 方案二 问题分析定位 一直连着没问题,只要间隔一段时间不连,再去连的时候就会出现超时问题,超时几次后就 ...

  7. 超详细Netty入门,看这篇就够了!

    思维导图 前言 本文主要讲述Netty框架的一些特性以及重要组件,希望看完之后能对Netty框架有一个比较直观的感受,希望能帮助读者快速入门Netty,减少一些弯路. 一.Netty概述 官方的介绍: ...

  8. netty入门前置知识-NIO

    netty入门前置知识-NIO Netty简介 Netty 的介绍 Netty 的应用场景 互联网行业 游戏行业 大数据领域 其它开源项目使用到 Netty Netty 的学习资料参考 Java BI ...

  9. Netty入门教程——认识Netty

    什么是Netty? Netty 是一个利用 Java 的高级网络的能力,隐藏其背后的复杂性而提供一个易于使用的 API 的客户端/服务器框架. Netty 是一个广泛使用的 Java 网络编程框架(N ...

最新文章

  1. 深度学习Dropout技术分析
  2. SER SERVER存储过程
  3. Gateway网关-网关作用介绍
  4. 解决研发管理问题的途径
  5. Spring Integration –轮询文件的创建和修改
  6. 趣学 C 语言(八)—— 文件内部位置
  7. python爬虫什么意思-Python爬虫是什么意思有啥用 python爬虫原理实例介绍
  8. python seo 外链_百度链接提交-主动推送程序Python版
  9. 伪代码之KMeans和DBSCAN
  10. IOUtils pom 依赖
  11. JDK成年了,JDK18版本发布,走进JDK18新特性
  12. apache 开启 网页压缩
  13. 基于vegan包对otu表抽平——r语言
  14. Md5+salt实现用户加密
  15. 9.C++例2-10 输入一系列整数,统计出正整数个数i和负整数个数j,读入0则结束。
  16. HTM页面监听Crtl + C 事件
  17. CSS单行文本和多行文本
  18. 中文和拼音的相关转换
  19. VirtualBox 共享粘贴板失效 安装增强功能时提示 未能加载虚拟光盘到虚拟电脑
  20. css都能作哪些特效,推荐10款重量级CSS3的全新特效

热门文章

  1. Uber CEO博鳌论坛采访:看好中国市场共享经济的发展模式
  2. ReactJS实用技巧(1):JSX与HTML的那些不同
  3. 在浏览器里友好的变量输出查看函数方法
  4. 为什么国内的网盘公司都在 TB 的级别上竞争,成本会不会太高?
  5. LeetCode(709)——转换成小写字母(JavaScript)
  6. 【Vue2.0】— 组件的自定义事件(十八)
  7. 【VM】—VM安装包
  8. 【博客项目】—Joi(八)
  9. java 不写this_还没弄明白Java中的this关键字吗,那来看这篇就够了!
  10. 后来,我学会了每做完一件事