概述
客户端和服务器断开连接有两种情况: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.服务器断开连接所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复