zoukankan      html  css  js  c++  java
  • Netty入门(九)空闲连接以及超时

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

      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 }
  • 相关阅读:
    sqlplus 登陆报协议适配器错误
    C# 类型参数的约束
    每天学一点shell——tr
    每天学一点shell-------------------------sed
    每天学一点shell--------文本处理相关
    每天学一点java DecimalFormat
    Java String 创建了几个对象
    Java UDP数据报发送与接收 学习
    shell脚本-----------每天学一点调试
    shell脚本 ----每天学一点shell
  • 原文地址:https://www.cnblogs.com/coderJiebao/p/Netty09.html
Copyright © 2011-2022 走看看