一种动态自适应心跳发送方法及系统技术方案

技术编号:14760032 阅读:71 留言:0更新日期:2017-03-03 09:44
本发明专利技术公开了一种动态自适应心跳发送方法及系统,涉及移动终端与服务端的心跳包发送领域。该方法的步骤为:当客户端使用的网络环境发送变化时,获取变化之后的网络环境;若不存在网络环境的心跳包发送时间,则设置deltTime为50~200ms/次,根据deltTime向服务器发送测试消息,判断测试消息是否发送成功,若是,增加deltTime的时长后重新发送测试消息;否则确认测试消息发送超时,将测试消息发送超时前一次设置的deltTime,作为网络环境的心跳包发送时间,根据当前心跳包发送时间,向服务器发送心跳包。本发明专利技术能够在保证最低时间下成功发送心跳包的同时,避免客户端与服务器因为心跳包发送时间过长而导致超时的问题发生。

【技术实现步骤摘要】

本专利技术涉及移动终端与服务端的心跳包发送领域,具体涉及一种动态自适应心跳发送方法及系统
技术介绍
服务器和客户端(移动终端设备,例如手机、平板电脑等)进行通信时,为了保证客户端和服务器长时间保持连接,以便服务器能够即时给客户端推送消息,一般通过心跳包(客户端和服务器间定时通知对方自己状态的一个自己定义的命令字,按照一定的时间间隔发送,类似于心跳,所以叫做心跳包)维持客户端与服务器之间的长期通信。常规的心跳包为固定发送时间,例如客户端每隔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也不能设置太小,若太小虽然提升了测试进度,但是会增加后续的重复测试次数。因此,为了满足重复测试次数和测试精度的平衡,本文档来自技高网...
一种动态自适应心跳发送方法及系统

【技术保护点】
一种动态自适应心跳发送方法,其特征在于,该方法包括以下步骤:S1:当客户端当前使用的网络环境发送变化时,获取变化之后的网络环境,转到S2;S2:判断客户端中是否存在当前网络环境的心跳包发送时间,若是,转到S6,否则转到S3;S3:建立客户端与服务器之间的连接,设置测试消息发送时间deltTime为50~200ms/次,转到S4;S4:客户端根据deltTime向服务器发送测试消息,判断测试消息是否发送成功,若是,增加deltTime的时长后重新执行S4,否则确认测试消息发送超时,转到S5;S5:将测试消息发送超时前一次设置的deltTime,作为当前网络环境的心跳包发送时间并保存后,重新执行S2;S6:根据当前网络环境的心跳包发送时间,向服务器发送心跳包。

【技术特征摘要】
1.一种动态自适应心跳发送方法,其特征在于,该方法包括以下步骤:S1:当客户端当前使用的网络环境发送变化时,获取变化之后的网络环境,转到S2;S2:判断客户端中是否存在当前网络环境的心跳包发送时间,若是,转到S6,否则转到S3;S3:建立客户端与服务器之间的连接,设置测试消息发送时间deltTime为50~200ms/次,转到S4;S4:客户端根据deltTime向服务器发送测试消息,判断测试消息是否发送成功,若是,增加deltTime的时长后重新执行S4,否则确认测试消息发送超时,转到S5;S5:将测试消息发送超时前一次设置的deltTime,作为当前网络环境的心跳包发送时间并保存后,重新执行S2;S6:根据当前网络环境的心跳包发送时间,向服务器发送心跳包。2.如权利要求1所述的动态自适应心跳发送方法,其特征在于:S3中所述deltTime为100ms。3.如权利要求2所述的动态自适应心跳发送方法,其特征在于:S3中所述deltTime时长的增加方法为:增加时长后的deltTime=增加时长前的+初始设置的deltTime。4.如权利要求1所述的动态自适应心跳发送方法,其特征在于:S2的具体流程为:在Android的SharedPreferences文件中,传入当前网络环境的心跳包发送时间键,SharedPreferences文件返回与当前心跳包发送时间键对应的网络环境的心跳包发送时间;若心跳包发送时间不为空,则确定存在当前网络环境的心跳包发送时间,转到S6;若心跳包发送时间为空,则确定不存在当前网络环境的心跳包发送时间,转到S3;S5中所述当前网络环境的心跳包发送时间的保存方法为:将当前网络环境的心跳包发送时间写入SharedPreferences文件中。5.如权利要求1至4任一项所述的动态自适应心跳发送方法,其特征在于:S1中所述客户端当前使用的网络环境未发生变化时,直接获取客户端当前使用的网络环境,转到S2。6.如权利要求1至4任一项所述的动态自适应心跳发送方法,其特征在于:S1中所述获取变化之后的网络环境的具体流程为:监听客户端的网络广播,网络广播发送有网络变化消息时,获取并解析网络变化消息,得到变化之后的网络环境。7.一种动态自适应心跳发送系统,其特征在于:该系统包括设置于客户端上的网络环境获取模块、心跳包发送时间确认模块、测试参数设置模块、心跳包发送时间测试模块、心跳包发送时间储存模块和心跳包发送模块;网络环境获取模块用于...

【专利技术属性】
技术研发人员:张磊
申请(专利权)人:武汉斗鱼网络科技有限公司
类型:发明
国别省市:湖北;42

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1