您当前的位置:首页 > 互联网教程

IM即时通讯开发如何实现Android版智能心跳机制

发布时间:2025-05-11 23:44:58    发布人:远客网络

IM即时通讯开发如何实现Android版智能心跳机制

一、IM即时通讯开发如何实现Android版智能心跳机制

IM即时通讯开发如何实现Android版智能心跳机制。

a)延迟心跳测试法:这是测试结果准确的前提保障,我们认为长连接建立后连续三次成功的短心跳就可以很大程度的保证下一次心跳环境是正常的。

b)成功一次认定,失败连续累积认定:成功是绝对的,连续失败多次才可能是失败。

c)临界值避免:我们使用比计算出的心跳稍微小一点的值做为稳定心跳避免临界值。

d)动态调整:即使在一次完整的智能心跳计算过程中,我们没有找到最好的值,我们还有机会来进行校正。

方案需考虑到影响连接寿命的思素

在Android下,不管是GCM,还是微信,都是通过TCP长连接来进行消息收发的,TCP长连接存活,消息收发就及时,所以要对影响TCP连接寿命的因素进行研究。

大部分移动无线网络运营商都在链路一段时间没有数据通讯时,会淘汰 NAT表中的对应项,造成链路中断(NAT超时的更多描述见附录9.1)。NAT超时是影响TCP连接寿命的一个重要因素(尤其是国内),所以客户端自动测算NAT超时时间,来动态调整心跳间隔,是一个重要的优化点。

目前测试发现安卓系统对DHCP的处理有Bug,DHCP租期到了不会主动续约并且会继续使用过期IP,这个问题会造成TCP长连接偶然的断连。(租期问题的具体描述见附录9.2)。

手机网络和WIFI网络切换、网络断开和连上等情况有网络状态的变化,也会使长连接变为无效连接,需要监听响应的网络状态变化事件,重新建立Push长连接。

为了保证微信收消息及时性的体验,当微信处于前台活跃状态时,使用固定心跳。微信进入后台(或者前台关屏)时,先用几次最小心跳维持长链接。然后进入后台自适应心跳计算。这样做的目的是尽量选择用户不活跃的时间段,来减少心跳计算可能产生的消息不及时收取影响。

可根据自身产品的特点选择合适的心跳范围。

因为每个网络的NAT时间可能不一致。所以需要区分计算,数据网络按subType做关键字,WIFI按WIFI名做关键字。对稳定的网络,因为NAT老化时间的存在,在自适应计算态的时候,暂设计以下步骤在当前心跳区间逼近出最大可用的心跳。即时通讯聊天软件app开发可以加蔚可云的v:weikeyun24咨询

[MinHeart,MaxHeart]——心跳可选区间。

successHeart——当前成功心跳,初始为MinHeart

curHeart——当前心跳初始值为successHeart

successStep——稳定期后的探测步长

经过该流程,会找到必然使心跳失败的curHeart(或者MaxHeart),为了保险起见,我们选择比前一个成功值稍微小一点的值作为后台稳定期的心跳间隔。

影响手机网络测试的因素太多,为了尽量保证测试结果的可靠性,我们使用延迟心跳测试法。在我们重新建立TCP连接后,先使用  短心跳连续成功三次,我们才认为网络相对稳定,可以使用curHeart进行一次心跳测试。图4-2显示了一次有效心跳测试过程。图4-3显示了在没有达到稳定网络环境时,我们会一直使用固定短心跳直到满足三次连续短心跳成功。

使用延迟心跳测试的好处是,可以剔除偶然失败,和网络变化较大的情况(如地铁),使测试结果相对可靠(五次延迟测试确定结论)。同时在网络波动较大的情况,使用短心跳,保证收取消息相对及时。

c)运行时的动态调整策略(已经按测算心跳稳定值后)

NAT超时值算出来后,在维持心跳的过程中的策略。

-  无网络、网络时好时坏、偶然失败、NAT超时变小:

在后台稳定期发生心跳发生失败后,我们使用延迟心跳测试法测试五次。如果有一次成功,则保持当前心跳值不变;如果五次测试全失败,重新计算合理心跳值。该过程如图4-4所示,有一点需要注意,每个新建的长连接需要先用短心跳成功维持3次后才用successHeart进行心跳。

以周为周期,每周三将后台稳定态调至自适应计算态,使用心跳延迟法往后探测心跳间隔。

-  successHeart是NAT超时临界值:

因为我们现在选择的是一个比successHeart稍小的值作为稳定值,所以在计算过程中可以避开临界值。当运营商在我们后台稳定期将NAT超时调整为我们当前计算值,那么由于我们每周会去向下探索,所以下一周探测时也可以及时调整正确。

在用户的一些主动操作以及联网状态改变时,增加冗余Sync和心跳,确保及时收到消息。

1、当用户点亮屏幕的时候,做一次心跳。

2、当微信切换到前台时,做一次Sync。

3、联网时重建信令TCP,做一次Sync。

1、问题:根据目前的测试结果显示,安卓不续约到期的IP Bug,会导致TCP连接在不确定的时间点失效,从而会导致一次心跳失败。

2、预防:统计后台稳定期的心跳成功率,上报给后台。后台可以按地区分网络监控这个指标的波动,并且后台可以根据不同的波动,动态调整某区域特定网络下可选的心跳区间。

因为 IP v4的 IP量有限,运营商分配给手机终端的 IP是运营商内网的 IP,手机要连接 Internet,就需要通过运营商的网关做一个网络地址转换(Network Address Translation,NAT)。简单的说运营商的网关需要维护一个外网 IP、端口到内网 IP、端口的对应关系,以确保内网的手机可以跟 Internet的服务器通讯。

二、国内的即时通讯软件有哪些

QQ:国内用户量第一。在2004年就已经拥有2.26亿注册用户、500多万收费用户,而且每天还在以几十万的数量递增着。与其他中文通讯软件相比,腾讯QQ以其漂亮的界面、合理的设计、良好的易用性、强大的功能(如:隐藏功能、分组功能等),稳定高效的系统运行,赢得了用户的青睐,如果你不嫌它广告较多的话,的确是不错的聊天软件。提供了大量卡通图案,而且引入了立体风格,形象更趋于卡通化。新版QQ同时增加了自定义动态表情。支持网友自定义显示系统表情的行数,灵活方便的快捷键设置,把热键设置为与表情相同的字或字母,炫彩汉字和字母的搭配可与MSN媲美。所以,无论是从用户数量还是公众影响力来看,QQ都是国内即时通讯软件市场上无可争议的“老大”。QQ最不讨人喜欢的是广告大量存在,而且似乎一直在变本加厉;安装的可定制性差,最让人无法忍受的莫过于腾讯浏览器,这个并不是所有人都中意的多窗口浏览器,一旦安装QQ就会被安装,而且会更改很多系统设置,使普通用户被逼无奈只能使用该浏览器;随着视频聊天等功能的整合,QQ的资源消耗十分严重:安装文件的大小大约是MSN的4倍,安装后的文件夹为80MB(MSN为5.5MB),内存占用12.5MB(MSN占用3MB),另外,国外用户较少。

MSN:全球用户量居前,约有5000万用户,国内用户量应该第二。在人们的印象中,MSN更多的偏重于办公阶层用户,傻瓜式操控性让我们能够在最短的时间内掌握它的使用要决。主界面相当的清爽,卡通味不浓。但软件主界面过于宽大,占用了相当的桌面空间,不像QQ一样小巧玲珑。现在的MSN 7.0版本,更给人们一种耳目一新的感觉,对于那些喜欢时尚和追求多变的上班族而言是个不错的选择。MSN最让人津津乐道的功能就是把汉字做成彩色的表情图片,热键设置为同样的字,就可以在聊天时候打出五彩的汉字,效果炫丽。但不支持批量导入导出,可显示出的自定义表情只有10个,用起来还是有诸多不便。支持手写;在占用资源上比同类软件优胜;稳定性超强;语音与视频质量上佳,开着语音打CS,一样稳定清晰(QQ则断断续续,听不清楚);最让人兴奋不已的是,从6.0版本开始,可以穿透防火墙进行文件共享。缺点:不能向离线用户发送消息,无法自定义离线状态,在新版本中依然未得到很好的解决;增加用户时也不如QQ方便,须通过其“繁忙”的网页来进行用户的搜索和添加,而且搜索网站还是繁体的。

ICQ:作为同类软件的始祖,目前注册用户超过1.5亿,在全球拥有广泛的用户支持,但缺乏中国本土化支持仍是其最大缺点。

AIM:注册用户数量居全球(不含中国)第二,仅次于ICQ。

UC:作为后起之秀的UC,具有一些QQ会员拥有的功能,其免费网络硬盘服务提供了文件上传、下载服务,功能简单实用。UC普通用户的网民所享有的空间(32MB)是QQ普通用户(16MB)的一倍。更棒的是,只要UC的在线时间累计达到了100小时/500小时,网络硬盘的容量可以分别免费升级为64MB/128MB。UC的聊天功能支持动画的显示和发送。点击UC聊天窗口的按钮,选择本地动画发送,在本地硬盘选择想要发送的图片,确认后选择发送,就可以给在线的好友发送动画图片了。有自动聊天功能,不管在什么时候,只要打开UC,都会有“人”在线亲切地对你嘘寒问暖。如今无论是注册用户还是更有价值的同时在线人数,UC都抢掉QQ百分之五以上的市场份额(QQ依然是霸主,但现在已经无法一手遮天了)。假以时日也许会占领我们后面的一代人。

网易泡泡:在无广告打扰、整合网易服务上做得比较出色。大部分聊天功与QQ是类似,但也有一些特有的功能:支持用户自选图片作为头像;有“常用短语”的服务,提供了许多聊天妙语;可对每个联系人设置选择性隐身,右键单击联系人即可(这点QQ也有一个选项“如果该好友上线,则自动对其隐身

三、im即时通讯开发:离线推送到达率优化方法

1、闲鱼的IM消息系统作为买家与卖家的沟通工具,增进理解、促进信任,对闲鱼的商品成交有重要的价值,是提升用户体验最关键的环节。

2、然而,随着业务体量的快速增长,当前这套消息系统正面临着诸多急待解决的问题。

3、 3)消息玩法与消息底层系统的耦合过强。

4、经过评估,我们认为现阶段离线推送的到达率问题最为关键,对用户体验影响较大。

5、从数据通信链接的技术角度,我们根据闲鱼客户端是否在线,将整体消息链路大致分为强感知链路和弱感知链路。

6、强感知链路由以下子系统或模块:

7、 2) idleapi-message(闲鱼的消息网关);

8、 3) heracles(闲鱼的消息底层服务);

9、 4) accs(阿里自研的长连接通道);

10、整条链路的核心指标在于端到端延迟和消息到达率。

11、强感知链路中的双方都是在线的,消息到达客户端就可以保证接收方感知到。强感知链路的主要痛点在消息的端到端延迟。

12、弱感知链路与强感知链路的主要不同在于:弱感知链路的接收方是离线的,需要依赖离线推送这样的方式送达。

13、因此弱感知链路的用户感知度不强,其核心指标在于消息的到达率,而非延迟。

14、所以当前阶段,优化弱感知链路的重点也就是提升离线消息的到达率。换句话说,提升离线消息到达率问题,也就是优化弱感知链路本身。即时通讯聊天软件app开发可以咨询蔚可云。

15、 1) HSF是一个远程服务框架,是dubbo的内部版本;

16、 2) tair是阿里自研的分布式缓存框架,支持 memcached、Redis、LevelDB等不同存储引擎;

17、 3) agoo是阿里的离线推送中台,负责整合不同厂商的离线推送通道,向集团用户提供一个统一的离线推送服务;

18、 4) accs是阿里自研的长连接通道,为客户端、服务端的实时双向交互提供便利;

19、 5) lindorm是阿里自研的NoSQL产品,与HBase有异曲同工之妙;

20、 6)域环是闲鱼消息优化性能的核心结构,用来存储用户最新的若干条消息。

21、强感知链路和弱感知链路在通道选择上是不同的:

22、 1)强感知链路使用accs这个在线通道;

23、 2)弱感知链路使用agoo这个离线通道。

24、通俗了说,弱感知链路指的就是离线消息推送系统。

25、相比较于在线消息和端内推送(也就是上面说的强感知链路),离线推送难以确保被用户感知到。

26、 1)未发送到用户设备:即推送未送达用户设备,这种情况可以从通道的返回分析;

27、 2)发送到用户设备但没有展示到系统通知栏:闲鱼曾遇到通道返回成功,但是用户未看到推送的案例;

28、 3)展示到通知栏,并被系统折叠:不同安卓厂商对推送的折叠策略不同,被折叠后,需用户主动展开才能看到内容,触达效果明显变差;

29、 4)展示到通知栏,并被用户忽略:离线推送的点击率相比于在线推送更低。

30、针对“1)未发送到用户设备”,原因有:

31、针对“3)展示到通知栏,并被系统折叠”,原因有:

32、针对“4)展示到通知栏,并被用户忽略”,原因有:

33、 2)用户看到了推送,但是对内容不感兴趣;

34、 3)用户在忙别的事,无暇处理。

35、总之:以上这些离线消息推送场景,对于用户来说感知度不高,我们也便称之为弱感知链路。

36、我们的弱感知链路分为3部分,即:

37、共包含了Hermes、agoo、厂商、设备、用户、承接页这几个环节。

38、从推送的产生到用户最终进入APP,共分为如下几个步骤:

39、  步骤1:Hermes是闲鱼的用户触达系统,负责人群管理、内容管理、时机把控,是整个弱感知链路的起点。;

40、  步骤2:agoo是阿里内部承接离线推送的中台,是闲鱼离线推送能力的基础;

41、  步骤3:agoo实现离线推送依靠的是厂商的推送通道(如:苹果的apns通道、Google的fcm通道、及国内各厂商的自建通道。;

42、  步骤4:通过厂商的通道,推送最终出现在用户的设备上,这是用户能感知到推送的前提条件;

43、  步骤5:如果用户刚巧看到这条推送,推送的内容也很有趣,在用户的主动点击下会唤起APP,打开承接页,进而给用户展示个性化的商品。

44、经过以上5个步骤,至此弱感知链路就完成了使命。

45、 1)推送的消息是否投递给了用户;

46、 2)已投递到的消息用户是否有感知。

47、其中:到达设备这个阶段是最基础的,也是本次优化的核心。

48、我们可以将每一步的消息处理量依次平铺,展开为一张漏斗图,从而直观的查看链路的瓶颈。

49、通过分析以上漏斗图,弱感知链路的优化重点在三个方面:

50、 1) agoo受理率:是指我们发送推送请到的数量到可以通过agoo(阿里承接离线推送的中台)转发到厂商通道的数量之间的漏斗;

51、 2)厂商受理率:是指agoo中台受理的量到厂商返回成功的量之间的漏斗;

52、 3) Push点击率:也就通过以上通道最终已送到到用户终端的消息,是否最终转化为用户的主动“点击”。

53、有了优化方向,我们来看看优化手段吧。