JavaNetty实现心跳机制过程解析-创新互联

netty心跳机制示例,使用Netty实现心跳机制,使用netty4,IdleStateHandler 实现。Netty心跳机制,netty心跳检测,netty,心跳

创新互联主营临桂网站建设的网络公司,主营网站建设方案,成都App制作,临桂h5小程序开发搭建,临桂网站营销推广欢迎临桂等地区企业咨询

本文假设你已经了解了Netty的使用,或者至少写过netty的helloworld,知道了netty的基本使用。我们知道使用netty的时候,大多数的东西都与Handler有关,我们的业务逻辑基本都是在Handler中实现的。Netty中自带了一个IdleStateHandler 可以用来实现心跳检测。

心跳检测的逻辑

本文中我们将要实现的心跳检测逻辑是这样的:服务端启动后,等待客户端连接,客户端连接之后,向服务端发送消息。如果客户端在“干活”那么服务端必定会收到数据,如果客户端“闲下来了”那么服务端就接收不到这个客户端的消息,既然客户端闲下来了,不干事,那么何必浪费连接资源呢?所以服务端检测到一定时间内客户端不活跃的时候,将客户端连接关闭。本文要实现的逻辑步骤为:

  • 启动服务端,启动客户端
  • 客户端向服务端发送"I am alive",并sleep随机时间,用来模拟空闲。
  • 服务端接收客户端消息,并返回"copy that",客户端空闲时 计数+1.
  • 服务端客户端继续通信
  • 服务端检测客户端空闲太多,关闭连接。客户端发现连接关闭了,就退出了。

有了这个思路,我们先来编写服务端。

心跳检测服务端代码

public class HeartBeatServer {

  int port ;
  public HeartBeatServer(int port){
    this.port = port;
  }

  public void start(){
    ServerBootstrap bootstrap = new ServerBootstrap();
    EventLoopGroup boss = new NioEventLoopGroup();
    EventLoopGroup worker = new NioEventLoopGroup();
    try{
      bootstrap.group(boss,worker)
          .handler(new LoggingHandler(LogLevel.INFO))
          .channel(NioServerSocketChannel.class)
          .childHandler(new HeartBeatInitializer());

      ChannelFuture future = bootstrap.bind(port).sync();
      future.channel().closeFuture().sync();
    }catch(Exception e){
      e.printStackTrace();
    }finally {
      worker.shutdownGracefully();
      boss.shutdownGracefully();
    }
  }
  public static void main(String[] args) throws Exception {
    HeartBeatServer server = new HeartBeatServer(8090);
    server.start();
  }
}

另外有需要云服务器可以了解下创新互联建站www.cdcxhl.com,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


分享标题:JavaNetty实现心跳机制过程解析-创新互联
转载源于:http://hbruida.cn/article/coheos.html