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

作者&投稿:荀放 (若有异议请与网页底部的电邮联系)
~ IM即时通讯开发如何实现Android版智能心跳机制。

大体思路

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

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

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

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

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

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

1、NAT超时

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

2、DHCP的租期 (lease time)

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

3、网络状态变化

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

心跳范围选择

1、前后台区分处理:

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

2、后台自适应心跳选择区间:

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

自适应心跳算法量化描述

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

a)变量说明:

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

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

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

heartStep——心跳增加步长

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

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

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

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

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

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

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

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

NAT超时变大:

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

-  successHeart是NAT超时临界值:

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

d)冗余Sync和心跳

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

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

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

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

可能存在的风险及预防措施

DHCP租期因素:

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

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

NAT超时介绍

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


宵略和mchat有什么关系
后者是上海宵略网络科技有限公司开发并运营的即时通讯类产品。MChat是由上海宵略网络科技有限公司开发并运营的即时通讯类产品。该产品以安全、私密、高效为核心卖点,提供了端到端加密、语音聊天、视频会议等功能,为用户提供了一个安全、私密、高效的通讯环境。MChat还拥有丰富的插件和应用生态,能够满足不...

mchat是什么??
1. MChat是一种简洁的社交聊天应用程序,它提供了一个用户与好友之间的私人空间。2. 该平台采用端到端加密技术,确保用户信息的安全,消除了信息泄露的担忧。3. 用户可以选择私密聊天,或者创建群组进行视频和语音通话。4. 聊天工具,也称为即时通讯(IM)软件或IM工具,允许用户通过网络客户端进行实时...

imo企业即时通讯平台imo企业即时通讯平台简介
imo企业即时通讯平台,全称为 "i’m office",是由上海易睦网络科技有限公司(即上海艾睦网城网络科技有限公司)倾力打造的一款专业级的在线办公工具。它专注于为企业、政府部门和各类组织提供全方位的即时通讯服务。该平台涵盖了丰富的功能,包括文字\/语音通讯,方便快捷地进行团队内部沟通;文件传输和文档...

messenger是什么软件
messenger是由Facebook开发的即时通讯软件。MSN全称MSN Messenger,是微软公司推出的一款即时通讯软件,支持文字聊天,语音对话,视频会议等即时交流;拥有海量用户在线互动,支持语音及文字等多种聊天方式,用户可快速发送表情包及动图进行交流。MSN是一种Internet软件,它基于Microsoft高级技术,可使人们更有效地...

企业即时通讯有哪些好处?
织架构,使用户不能与组织架构以为的人聊天,这样杜绝了QQ、MSN等大众即时通讯工 具无法管理的缺点。企业信息安全也得到了保证。谢谢您对电信产品的关注,祝您生活愉快。 如果以上信息没有解决您的问题,也可登录广东电信手机商城(http:\/\/m.gd.189.cn),向在线客服求助,7X24小时在线喔!

什么是IM
Instant Messenger(即时通信软件),msn、QQ、雅虎通等都是IM

鼎力推荐github 6.7k star开源IM项目OpenIM性能及消息可靠性测试_百 ...
OpenIM是由前微信技术专家打造的开源的即时通讯组件。Open-IM包括IM服务端和客户端SDK,是一套整体的解决方案,代码开源,一切可控, OpenIM可以实现全平台支持,目前支持Android,iOS,Flutter,Uni-app,react-native, JSSDK等。 OpenIM可以应用在企业内部办公,dating交友,在线客服等项目,也可以用于元宇宙。 github地址:htt...

I`M和QQ有什么不同?
IM是英文Instant Message的缩写,也就是即时讯息(即时通信、即时通讯)软件。我们常用的QQ,MSN,Gtalk,Yahoo Messenger,网易泡泡等都属于IM软件。它们能让你迅速地在网上找到你的朋友或工作伙伴,可以实时交谈和互传信息。而且,现在不少IM软件还集成了数据交换、语音聊天、网络会议、电子邮件的功能。

IM跨平台技术学习(八):新QQ桌面版为何选择Electron作为跨端框架_百度...
在内存管理方面,团队通过深入理解Electron架构,改进开发思维,优化内存使用,保证内存只在必要时占用,通过技术手段和工具进行监控与优化。经过努力,新QQ桌面版的内存控制在长时间挂机下稳定在220M左右,显示了团队的努力成效。未来,QQ技术团队不仅负责桌面版的开发,还在积极拥抱AI,提升研发效率,同时计划...

有色MQQ吗?
有色MQQ存在。MQQ通常指的是即时通讯软件QQ的移动端版本。而“有色”在这里可能指的是具有特定主题、界面设计或特殊功能的版本。例如,为了满足不同用户的需求和审美,开发者可能会推出具有不同颜色主题或特殊设计的MQQ版本。这些版本可能在图标、界面背景、字体颜色等方面有所不同,为用户带来...

隆昌县18487016764: android 即时通讯怎么做 -
笃钓莫刻: 一般都是使用一些传输协议,参考如下:Android现在即时通讯(或者消息推送)有好几个开源项目框架可以实现,可以使用XMPP来实现即时通信.XMPP(Extensible Messageing and Presence Protocol:可扩展消息与存在协议)是目前主流的...

隆昌县18487016764: php和Android实现实时聊天 -
笃钓莫刻: 不知道你具体要做什么,我把即时通讯的原理跟你说一下吧(P2P的).首先,用户A输入自己的用户名和密码登录即时通讯服务器,服务器通过读取用户数据库来验证用户身份,如果用户名、密码都正确,就登记用户A的IP地 址、IM...

隆昌县18487016764: android的一个app软件怎么实现实时聊天功能 -
笃钓莫刻: 这种技术叫做即时通讯,实现这个功能的有很多技术,比如Soket、im,用这些技术都是需要自己写后台代码的,如果你觉得麻烦,可以直接用一些第三方jar包,例如融云、环信.用起来方便,也不用搞后台.

隆昌县18487016764: 我想给APP加个IM功能,如何实现? -
笃钓莫刻: 环信的即时通讯云最适合你的,Android、iOS、Web三大平台都支持.实现极其简单,只需要3步.第一步:在环信官网注册获得使用码.第二步:在环信官网下载SDK集成,加几行代码到App中,调试并修改UI等配置.第三步:将拥有IM功能的App上线,就ok了! 加入IM就是这么简单.

隆昌县18487016764: android 怎么实现语音聊天 -
笃钓莫刻: 可以用第三方即时通讯云服务商,也可以自己开发实现.看你公司的能力和需求.自己开发耗时耗人耗精力.用第三方,比如融云,这里就举个融云的例子吧. 可以直接集成融云的sdk,然后直接实现你说的功能.优点是快速方便,服务稳定.缺点是:不是自己开发的,如果出现问题需要提工单解决.

隆昌县18487016764: 如何搭建一个自己的IM即时通讯聊天软件?
笃钓莫刻: 搭建一个自己的IM即时通讯聊天软件的框架如下:1、CIM 中的各个组件均采用 Spring Boot 构建.2、采用 Netty + Google Protocol Buffer 构建底层通信.3、Redis 存放各个客户端的路由信息、账号信息、在线状态等.4、Zookeeper 用于 IM-server 服务的注册与发现.

隆昌县18487016764: android 即时通讯软件 怎么实现比较好 -
笃钓莫刻: 看你投入吧.最简单:直接接入第三方,融云直接几行代码就可以搞定,或者环信都是不错的.缺点是你的数据都暴露在第三方.其次:通讯层(长链接)改造smack,逻辑层(维护聊天会话、好友关系等)自己实现或者结合openfire改造.投入最大:全部都自己实现,通讯层Socket实现最好,如果会C/C++实现就更好了.当然缺点就是投入比较大了.

隆昌县18487016764: 请教各位大侠,im即时通信开发原理 -
笃钓莫刻: 即时通讯(Instant Messenger,简称IM)软件多是基于TCP/IP和UDP进行通讯的,TCP/IP和UDP都是建立在更低层的IP协议上的两种通讯传输协议.前 者是以数据流的形式,将传输数据经分割、打包后,通过两台机器之间建立起的虚电路,进...

隆昌县18487016764: Android基于融云sdk开发IM即时通讯聊天功能,有没有大神有系统的文档啊? -
笃钓莫刻: 文档直接看官方就好,可以看看下面的应用demo 基于Android的即时通讯应用[使用融云SDK] http://www.apkbus.com/forum.php?mod=viewthread&tid=258758&page=1&extra=#pid4004770

隆昌县18487016764: 什么是IM,如何实现?
笃钓莫刻: 所谓IM,就是Instant Message的简称. 类似于QQ,MSN,百度HI. 用socket实现即可.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网