我是靠谱客的博主 自由楼房,最近开发中收集的这篇文章主要介绍IM-客户端和服务器断开重连机制1.手机网络断开连接2.服务器断开连接,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

客户端和服务器断开连接有两种情况:1.手机网络断开连接, 2.手机和服务器端口连接;

1.手机网络断开连接

   添加一个Broadcastreceiver广播接收器,监听到网络连接以后,调用重连方法进行重连;

2.服务器断开连接

2.1 服务器设置闲置自动断开

为了减轻服务器压力,可以设置闲置超过设定的时间后就自动断开连接。

为了解决这种情况,可以设置一个心跳功能,利用轮询的方式,每隔一定时间发送一个数据包到服务器;

//是否已经断开连接
    boolean isDone=false;
    class HeartBeatThread extends Thread{
        @Override
        public void run() {
            try {
                while(!isDone){//连接没有断开
                    //发送数据包到服务器
                      ...
                    //
                    //设置发送间隔,这个时间要小于服务器的间隔自动断开设置的时间
                    Thread.sleep(30*1000);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

2.2 服务器重启

有时候可能出现服务器宕机,或服务器进行维护,客户端连接不上服务器端,即使服务器正常了,客户端也不知道。

为了处理这种情况,添加一个断开自动重连机制;

自动重连机制原理:

在一个线程中,每隔一定时间,判断如果连接断开,就自动重新连接一次服务器。

//是否已经断开连接
boolean isDone=true;
public class ReconnectionThread extends Thread {

        //连接计数器
        private int waiting;
    

        public void run() {
            try {
                while (isDone) {//断开连接
                    Thread.sleep((long) waiting() * 1000L);
                    //调用连接方法
                     ...
                    waiting++;
                }
            } catch (final InterruptedException e) {

            }
        }

        private int waiting() {
            if (waiting > 20) {
                return 600;
            }
            if (waiting > 13) {
                return 300;
            }
            return waiting <= 7 ? 10 : 60;
        }
    }

注意:

 1. 重连成功isDone要设置false,要不然一直循环;

 2. 通过waiting计数重连的次数,随着次数的增加,重连间隔时间也进行延长,防止不断重连造成耗电;

 3. 重连成功waiting要清零:waiting=0; 

 

最后

以上就是自由楼房为你收集整理的IM-客户端和服务器断开重连机制1.手机网络断开连接2.服务器断开连接的全部内容,希望文章能够帮你解决IM-客户端和服务器断开重连机制1.手机网络断开连接2.服务器断开连接所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(64)

评论列表共有 0 条评论

立即
投稿
返回
顶部