一种动态自适应心跳发送方法及系统与流程

文档序号:12278333阅读:171来源:国知局

本发明涉及移动终端与服务端的心跳包发送领域,具体涉及一种动态自适应心跳发送方法及系统。



背景技术:

服务器和客户端(移动终端设备,例如手机、平板电脑等)进行通信时,为了保证客户端和服务器长时间保持连接,以便服务器能够即时给客户端推送消息,一般通过心跳包(客户端和服务器间定时通知对方自己状态的一个自己定义的命令字,按照一定的时间间隔发送,类似于心跳,所以叫做心跳包)维持客户端与服务器之间的长期通信。常规的心跳包为固定发送时间,例如客户端每隔500毫秒发送一次心跳包与服务器进行通信。

但是,由于客户端在实际使用中的网络类型(例如移动、联通、电信)和网络环境不同网络环境(2G/3G/4G/WIFI),而不同网络类型和网络环境断开通信后重新连接的超时时间不同,因此为了兼容不同网络类型和网络环境的超时时间,需要根据最短超时时间来设置心跳包的发送时间(若心跳包的发送时间设置较低可能会导致部分网络环境下客户端与服务器断开连接),进而使得心跳包的发送时间过高。

进一步,由于每次发送心跳包均会消耗固定的网络流量和电能,因此长期按照较高的发送时间发送心跳包,会消耗大量的网络流量和电能,进而极大的降低了用户体验和客户端性能。



技术实现要素:

针对现有技术中存在的缺陷,本发明解决的技术问题为:针对不同的网络环境,测试并使用合适的心跳包发送时间,本发明测试出的心跳包发送时间,能够在保证最低时间下成功发送心跳包的同时,避免客户端与服务器因为心跳包发送时间过长而导致超时的问题发生,进而降低心跳包的发送次数,显著节省了客户端的网络流量和电能,提高了用户体验和客户端性能。

为达到以上目的,本发明提供的动态自适应心跳发送方法,包括以下步骤:

S1:当客户端当前使用的网络环境发送变化时,获取变化之后的网络环境,转到S2;

S2:判断客户端中是否存在当前网络环境的心跳包发送时间,若是,转到S6,否则转到S3;

S3:建立客户端与服务器之间的连接,设置deltTime为50~200ms/次,转到S4;

S4:客户端根据deltTime向服务器发送测试消息,判断测试消息是否发送成功,若是,增加deltTime的时长后重新执行S4,否则确认测试消息发送超时,转到S5;

S5:将测试消息发送超时前一次设置的deltTime,作为当前网络环境的心跳包发送时间并保存后,重新执行S2;

S6:根据当前网络环境的心跳包发送时间,向服务器发送心跳包。

与现有技术相比,本发明的优点在于:

本发明针对网络环境的不同动态测试并使用适宜心跳包发送时间,测试心跳包发送时间不需要使用网络。测试的心跳包发送时间时,采用设置较小的初始发送时间后逐步向上增加的方式进行测试,进而使得测试得到的心跳发送时间,能够在保证最低时间下成功发送心跳包的同时,避免客户端与服务器因为心跳包发送时间过长而导致超时的问题发生。

有鉴于此,与现有技术中发送时间过长或过段的心跳包发送时间相比,本发明会根据不同的网络环境,测试并使用合适的心跳包发送时间,进而在保证客户端与服务器长期连接的情况下,降低心跳包的发送次数,显著节省了客户端的网络流量和电能,提高了用户体验和客户端性能。

附图说明

图1为本发明实施例中的动态自适应心跳发送方法的流程图。

具体实施方式

以下结合附图及实施例对本发明作进一步详细说明。

参见图1所示,本发明实施例中的动态自适应心跳发送方法,包括以下步骤:

S1:当客户端当前使用的网络环境发送变化时,获取变化之后的网络环境,转到S2。当客户端当前使用的网络环境未发生变化、且首次使用时,直接获取客户端当前使用的网络环境,转到S2。

S1中获取变化之后的网络环境的原理为:在Android中网络环境的变化系统是通过广播接口来进行暴露的,若想要获取变化后的网络环境,则需要监听系统网络广播,一旦有广播有消息过来说明当前网络环境发生了变化,即可通过广播消息中携带的信息解析出当前的网络环境。

S1中获取变化之后的网络环境的具体流程为:

S101:通过调用registerReceiver函数注册来监听客户端的网络广播,网络广播发送有网络变化消息时,转到S102。

S102:获取网络变化消息中的网络描述信息,解析网络描述信息得到变化之后的网络环境,实际应用中的具体方法为:

通过函数getSystemService(Context.CONNECTIVITY_SERVICE)来获取到当前客户端的ConnectivityManager连接管理者类。

调用管理者类中的getActiveNetworkInfo函数来获取网络变化消息中的网络信息结构体NetInfo,获取NetInfo中的当前网络的描述信息。

调用NetInfo中的getType函数,返回描述信息中携带的变化之后的网络环境,网络环境分为下面几类:

NETWORK_CLASS_2_G:当前网络环境是2G网络;

NETWORK_CLASS_3_G:当前网络环境是3G网络;

NETWORK_CLASS_4_G:当前网络环境是4G网络;

TYPE_WIFI:当前网络环境是WIFI网络。

S2:判断客户端中是否存在当前网络环境的心跳包发送时间,若是,则转到S6,否则转到S3。

S2的具体流程为:从SharedPreferences文件中读取当前网络环境的心跳包发送时间,SharedPreferences是Android平台上一个轻量级的存储类,用来保存应用的一些常用配置,比如Activity(界面)状态,Activity暂停时,将此activity的状态保存到SharedPereferences中;当Activity重载,系统回调方法onSaveInstanceState时,再从SharedPreferences中将值取出。由于SharedPreferences的存储是根据键值对来进行存储的,因此读取时只需要传入当前网络环境对应的键就可以读取到相应的心跳包发送时间。

网络环境对应的键包括:

NET_2G:2G网络环境下的心跳值;

NET_3G:3G网络环境下的心跳值;

NET_4G:4G网络环境下的心跳值;

NET_WIFI:WIFI网络环境下的心跳值。

若SharedPreferences文件之前已经存储过该发送时间,那么就能够并返回该发送时间,即存在当前网络环境的心跳包发送时间,直接转到S6;若SharedPreferences文件从未存储过该发送时间,则返回的发送时间为空,即不存在当前网络环境的心跳包发送时间,需要转到S3。

S3:在客户端上通过openUrlConnection函数建立与服务器之间的连接,设置deltTime(测试消息发送时间)为50~200ms/次(即间隔50~200ms发送一次测试消息,本实施例中为100ms/次),转到S4。

S3中deltTime设置条件为:由于无论哪种网络环境下通常连接的超时时间都是秒级别的(一遍都是2-5秒左右),因此deltTime一定要确保不会出现心跳超时,所以一定不能太大(太大可能第一次就出现超时,进而无法实现S3中的增加时长后的测试功能),而且deltTime设置太大虽然能够减少后续的重复测试次数,但是会降低测试精度。

与此同时,deltTime也不能设置太小,若太小虽然提升了测试进度,但是会增加后续的重复测试次数。因此,为了满足重复测试次数和测试精度的平衡,本实施例将deltTime设置为100ms(一般情况下100ms是不会出现超时的)。

S4:客户端根据deltTime向服务器发送测试消息(测试消息一般为基本信息,例如客户端的描述信息等),判断测试消息是否发送成功(即服务器是否响应测试消息),若是,增加deltTime的时长后重新执行S4,否则确认测试消息发送超时,转到S5。

S4中deltTime时长的增加方法为:增加时长后的deltTime=增加时长前的+初始设置的deltTime。

S5:将测试消息发送超时前一次设置的deltTime作为timeOut-deltTime(当前网络环境的心跳包发送时间),将timeOut-deltTime保存后重新执行S2。

S5中将测试消息发送超时前一次设置的deltTime作为timeOut-deltTime的原因为:在保证最低时间下成功发送心跳包的同时,避免客户端与服务器因为心跳包发送时间过长而导致超时的问题发生。

S5中timeOut-deltTime的保存方法为:将当前网络环境的心跳包发送时间写入SharedPreferences文件中,详细流程需要根据SharedPreferences的本质(基于XML文件存储key-value键值对数据)制定,具体为:

S501:获取客户端中SharedPreferences的存储接口:通过函数PreferenceManager.getDefaultSharedPreferences(Context)就能够获取到系统默认的存储接口实例sharedPreferences;

S502:通过sharedPreferences调用其中的edit()函数获取到编辑接口editor;

S503:调用editor中的putInt函数(功能:存储一个整形数据)将timeOut-deltTime存储到编辑接口中:

S504:通过commit函数将editor中的timeOut-deltTime进行提交,客户端将提交后的timeOut-deltTime写入SharedPreferences文件。

S6:客户端根据当前网络环境的心跳包发送时间,向服务器发送心跳包。

本发明实施例提供的动态自适应心跳发送系统,包括设置于客户端上的网络环境获取模块、心跳包发送时间确认模块、测试参数设置模块、心跳包发送时间测试模块、心跳包发送时间储存模块和心跳包发送模块。

网络环境获取模块用于:当客户端当前使用的网络环境发送变化时,获取变化之后的网络环境,向心跳包发送时间确认模块发送心跳包发送时间确认信号。当客户端当前使用的网络环境未发生变化时,直接获取客户端当前使用的网络环境,向心跳包发送时间确认模块发送心跳包发送时间确认信号。

心跳包发送时间确认模块用于:收到心跳包发送时间确认信号后,判断客户端中是否存在当前网络环境的心跳包发送时间,若是,则向心跳包发送模块发送心跳包发送信号,否则向测试参数设置模块发送心跳包发送时间测试信号;具体流程为:

在Android的SharedPreferences文件中,传入当前网络环境的心跳包发送时间键,SharedPreferences文件返回与当前心跳包发送时间键对应的网络环境的心跳包发送时间;若心跳包发送时间不为空,则确定存在当前网络环境的心跳包发送时间;若心跳包发送时间为空,则确定不存在当前网络环境的心跳包发送时间。

测试参数设置模块用于:收到心跳包发送时间测试信号后,建立客户端与服务器之间的连接,设置deltTime为50~200ms/次,向心跳包发送时间测试模块发送心跳包发送时间测试信号。

心跳包发送时间测试模块用于:收到心跳包发送时间测试信号后,根据deltTime向服务器发送测试消息,判断测试消息是否发送成功,若是,增加deltTime的时长后(增加时长后的deltTime=增加时长前的+初始设置的deltTime),重新向心跳包发送时间测试模块发送心跳包发送时间测试信号,否则确认测试消息发送超时,向心跳包发送时间储存模块发送心跳包发送时间储存信号。

心跳包发送时间储存模块用于:收到心跳包发送时间储存信号后,将测试消息发送超时前一次设置的deltTime,作为当前网络环境的心跳包发送时间并保存后(将网络环境的心跳包发送时间写入SharedPreferences文件中),重新向心跳包发送时间确认模块发送心跳包发送时间确认信号。

心跳包发送模块用于:收到心跳包发送信号后,根据当前网络环境的心跳包发送时间,向服务器发送心跳包。

进一步,本发明不局限于上述实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围之内。本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1