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 }
  • 相关阅读:
    Razor中@:和text
    Razor返回HTML字符串
    EPPlus使用
    ASP.NET MVC使用AllowAnonymous特性跳过授权验证
    下拉框获取json文件的数据
    SpringBoot 监听机制
    MybatisPlus Warpper实现复杂查询
    整合MybatisPlus心得
    MybatisPlus性能分析插件
    MybatisPlus物理删除、逻辑删除
  • 原文地址:https://www.cnblogs.com/coderJiebao/p/Netty09.html
Copyright © 2011-2022 走看看