Netty 系列 ———— (四) 心跳检测


Netty 心跳检测

心跳检测是在长连接的情况下,会出现的一个场景,需要定时对一个连接进行检测,确认服务端或者客户端是否存活。如果不是存活的状态,需要启动重连 机制,来重新连接服务端或者客户端。

Netty 中的 IdleStateHandler

Netty 已经提供来一个封装好的 IdleStateHandler 来处理我们的心跳检测,将 IdleStateHandler 加入到客户端或者服务端的 pipeline 中,然后在定义的 Handler 中重写 userEventTriggered 方法就可以实现心跳检测。

需要将 IdleStateHandler 添加到 pipeline 的第一个 handler 中

在3S之内没有进行读或者写操作就会触发心跳检测机制

import java.util.concurrent.TimeUnit;

/**
 * 心跳客户端实例
 *
 * @author g5niusx
 */
public class IdleClient {

    private static final int    PORT = 9999;
    private static final String IP   = "127.0.0.1";


    public static void main(String[] args) throws InterruptedException {
        NioEventLoopGroup nioEventLoopGroup = new NioEventLoopGroup();
        Bootstrap         bootstrap         = new Bootstrap();
        bootstrap.group(nioEventLoopGroup)
                .channel(NioSocketChannel.class)
                .handler(new ChannelInitializer<SocketChannel>() {
                    @Override
                    protected void initChannel(SocketChannel ch) {
                        // 当3秒没有进行读写的时候,就会触发心跳,心跳的处理类要放在第一个
                        ch.pipeline().addFirst(new IdleStateHandler(0, 0, 3, TimeUnit.SECONDS));
                        ch.pipeline().addLast(new IdleClientHandler());
                    }
                })
                .connect(IP, PORT).channel().closeFuture().sync();

    }
}

源码地址: netty-demo-idle

  #netty 

« Elasticsearch 系列 ———— (二) Elasticsearch 的索引 Netty 系列 ———— (五) 自定义编码解码器 »
blog comments powered by Disqus