Netty在Android开发中的应用实战系列(三)——— 心跳处理, 断线重连

本文来自阿钟的投稿,阅读大约10分钟

一、客户端添加心跳处理

这里就需要提到一个netty重要的IdleStateHandler,用于处理心跳机制;为当前连接通道设置 读、写、读写 空闲超时时间,当达到了设定的时间那么就会回调ClientHandler中的userEventTriggered(ChannelHandlerContext ctx, Object evt)函数。
这里在解释一下什么叫空闲超时:假设你设置了客户端读超时为10s,如果持续10s内客户端没有收到数据(也就是服务端没有发送数据过来)那么就会回调userEventTriggered函数,如果有一直收到数据那么就不会回调userEventTriggered函数;直到持续10s没有收到数据则继续触发userEventTriggered函数。

  • IdleStateHandler()常用的构造函数,三个参数的释义

1public IdleStateHandler(int readerIdleTimeSeconds, int writerIdleTimeSeconds, int allIdleTimeSeconds) {
2        this((long)readerIdleTimeSeconds, (long)writerIdleTimeSeconds, (long)allIdleTimeSeconds, TimeUnit.SECONDS);
3    }
  • readerIdleTimeSeconds        空闲读的时长

  • writerIdleTimeSeconds       空闲写的时长

  • writerIdleTimeSeconds       空闲读写的时长

IdleStateHandler的使用

  • 与之前添加编解码器一样,往ChannelPipeline添加即可

 1NioEventLoopGroup group = new NioEventLoopGroup();
 2Bootstrap bootstrap = new Bootstrap()
 3        // 省略部分代码
 4        .handler(new ChannelInitializer<SocketChannel>() {
 5            @Override
 6            protected void initChannel(SocketChannel socketChannel) throws Exception {
 7                ChannelPipeline pipeline = socketChannel.pipeline();
 8                //添加心跳处理Handler
 9                pipeline.addLast(new IdleStateHandler(10, 0, 0));
10                //省略部分代码
11            }
12        });
13// 连接到服务端
14ChannelFuture channelFuture = bootstrap.connect(new InetSocketAddress(IP, PORT));
  • ClientHandler中进行心跳数据包发送

 1@Override
 2public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {
 3    super.userEventTriggered(ctx, evt);
 4    if (evt instanceof IdleStateEvent) {
 5        if (((IdleStateEvent) evt).state() == IdleState.READER_IDLE) {
 6            sendHeartPkg(ctx);
 7        }
 8    } else {
 9        su
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值