移动端IM实现方案

  1. 第三方平台

    比如环信,融云,leancloud,容联云、网易云信等等。直接使用sdk就可以实现了,最简单最直接,而且稳定性已经不错了,连UI界面都带有了,可以自行修改,缺点是要收费。

  2. spark+smack+openfire

    安卓使用asmack,测试使用spark,服务器使用openfire。

    asmack可以说是smack的Android平台的支持版提供xmpp协议的实现,就是一些api。

    spark就是一个可以用来在pc相互同信的客户端。

    openfire部署也比较简单,next,next就差不多了。

  3. 使用第三方推送的sdk

    利用推送的及时性来做im也是可以的

  4. socket长连接

    因为网络优化和稳定性原因,达不到商用级别

  5. 基于xmpp自己实现

    通常IM采取的协议有xmpp、mqtt、protobuf等数据通信私有协议。

    XMPP是一种基于标准通用标记语言的子集XML的协议,它继承了在XML环境中灵活的发展性。

    XMPP中定义了三个角色,客户端,服务器,网关。通信能够在这三者的任意两个之间双向发生。服务器同时承担了客户端信息记录,连接管理和信息的路由功能。网关承担着与异构即时通信系统的互联互通,异构系统可以包括SMS(短信),MSN,ICQ等。基本的网络形式是单客户端通过TCP/IP连接到单服务器,然后在之上传输XML。

    命令要么用2进制的形式发送(比如QQ),要么用纯文本指令加空格加参数加换行符的方式发送(比如MSN)。而XMPP传输的即时通讯指令的逻辑与以往相仿,只是协议的形式变成了XML格式的纯文本。

移动端IM客户端的坑

  1. 流量

    采取哪种协议、图片缩略图、附件的压缩三点决定了流量的大小。

  2. 耗电

    (1)流量越小,耗电越低。 
    (2)心跳策略,减少心跳次数,耗电量就会降低。

  3. 心跳时长:

    wifi,2G,3G,4G,移动、电信、联通,不同网络,不同运行商,NAT失效时间不一样,因此心跳的时间也就不一样。

  4. 网络连接:

    cmnet和cmwap下连接处理机制。

  5. 网络不稳定:

    移动端最大的特点就是网络不稳定,在不稳定的网络状态下,如何保证消息以最快的速度到达?如何避免重联风暴?这些既需要从整体架构考虑,也需要在移动端采取巧妙的策略加以避免。

移动端IM架构设计的坑

  1. 连接器的设计

    连接器主要用来管理客户端的长连接。目前最好的连接器单台8G8核的服务器可以做到70万—100万的连接,而某些开发者只能做到4000左右的连接,相差好几个数量级。这里的奥妙在哪里呢?

  2. 中间件的设计

    是否采用通讯中间件?通讯中间件的好处有哪些?如果不采用中间件,连接器和逻辑服务器的连接关系如何管理呢?

  3. 逻辑服务器

    逻辑服务器通常简单一点,主要是根据业务逻辑进行最小粒度的划分即可。但是即便如此,还是有很多的开发者把看似相关实则不相关的逻辑放在一起,如把鉴权和message服务器放在一起。

  4. 状态服务器

    状态服务器主要管理用户在线、离线的相关状态,需要采取中心节点的方案,否则状态就会不同步。这里主要需要考虑状态服务器所对应的数据存储机制,如何进行写操作,如何进行读操作?以便最大的提高状态服务器的处理能力和响应速度。

  5. 数据库的设计

    数据库的设计是最难的,也是做大的瓶颈。因为无论对于sql(关系型)数据库还是nosql(非关系型)数据库,都有读写处理的极限,那就需要考虑数据库如何分区(根据什么原则、什么操作、哪些用户访问哪个节点上的数据库)。同时又需要考虑每个原子操作(如登陆)需要读哪些库,写哪些库。只有这些指标明确了,你才能在假设有100万并发用户,100万条并发消息的情况下,准确评估服务端需要多少台服务器,如何部署。

  6. 其他

    还有设备推送的处理,何种机制能够保证不丢消息,离线消息如何处理,等等。这些都是必备而又非常复杂的功能点和技术要求,都需要采取正确的架构和策略才能实现。

Android即时通讯开发总结相关推荐

  1. Android 即时通讯开发小结(二)

    <Android 即时通讯开发小结>基于IM Andriod 开发的各种常见问题,结合网易云信即时通讯技术的实践,对 IM 开发做一个全面的总结. 相关推荐阅读:. Android即时通讯 ...

  2. Android 即时通讯开发小结(一)

    本文将基于 IM Andriod 开发的各种常见问题,结合网易云信即时通讯技术的实践,对 IM 开发做一个全面的总结. 客户端架构 作为一个 IM 软件,最重要的一个特性就是保证消息的达到率和实时性. ...

  3. iOS和Android即时通讯开发时后台实时消息推送的原理和区别

    iOS和Android上的实时消息推送差异很大,往小了说是技术实现的差异,往大了说是系统实现理念的不同.实时消息推送在移动端互联网时代很平常,也很重要,它的存在让智能终端真正成为全时信息传播的工具.本 ...

  4. Android 即时通讯开发

    Android 即时连天工具的开发 客户端,开三个线程,thread1监听接收消息,用udp,thread2定时向服务器发送在线消息,用tcp,thread3每隔一段时间检查发送的消息的时间是否超时( ...

  5. android即时通讯开发!一个三非渣本的Android校招秋招之路,附答案

    开头 最近很多网友反馈:自己从各处弄来的资料,过于杂乱.零散.碎片化,看得时候觉得挺有用的,但过个半天,啥都记不起来了.其实,这就是缺少系统化学习的后果. 为了提高大家的学习效率,帮大家能快速掌握An ...

  6. 盘点im即时通讯开发中Android后台保活方案

    对于IM应用和消息推送服务的开发者来说,在Android机型上的后台保活是个相当头疼的问题. 老板一句:"为什么微信.QQ能收到消息,而你写的APP却不行?",直接让人崩溃,话说老 ...

  7. im即时通讯开发之后台应用保活、消息推送的噩梦

    Android P的最后一个开发者预览版(即DP5)已如期发布于2018年7月26日,根据上面这张发布路线图,相信Android P的正式版将很快到来.对于Andriod开发者来说,不管Andriod ...

  8. im即时通讯开发:进程被杀底层原理、APP应对被杀技巧

    本文的技术原理讲解透彻.系统源码分享到位.样例代码也很有参考意义,希望能对有同样兴趣爱好的Android开发者.IM开发者.推送系统开发者等,带来对于Android进程保活技术的深入理解. 一直以来, ...

  9. 即时通讯开发如何构建一套移动端消息推送系统

    消息推送作为移动端 APP 运营中的一项关键技术,已经被越来越广泛的运用. 本文追溯了推送技术的发展历史,剖析了其核心原理,并对推送服务的关键技术进行深入剖析,围绕消息推送时产生的服务不稳定性,消息丢 ...

最新文章

  1. vscode 开发lua搭建
  2. 关于sendinput() inserted only 0 out of 2 python程序问题的解决
  3. LAMP(三)之CentOS6编译安装httpd2.4
  4. C++之操作符重载和运算符重载
  5. centos 虚拟机glibc升级_分享Centos6.5升级glibc过程
  6. 如何把网址配置为http和https可以同时访问
  7. 求┐(P双向Q)∧(┐P蕴含R)的主析取范式、主合取范式
  8. 顺序容器(1):vector
  9. 机器学习-西瓜书第一、二章
  10. Redis Cluster集群的配置
  11. python如何预处理文本分类_文本分类二之文本预处理
  12. mysql 客户端命令行_强大的工具 MySQL客户端命令行应用技巧
  13. 性能评测|影驰RTX4090金属大师系列显卡正式发售!
  14. mysql触发器实例 update_mysql触发器实例说明
  15. 【BERT-多标签文本分类实战】之四——数据集预处理
  16. 程序员删库跑路,开源开发者的出路在哪里
  17. 计算机培训校本研修心得,关于校本研修培训心得体会(精选10篇)
  18. Matlab_GUI gcf、gca 以及gco 的区别用法
  19. 网卡mac地址的设置
  20. 用频谱仪测量晶体频率的方法

热门文章

  1. Spring Boot + Security + MyBatis + Thymeleaf + Activiti 快速开发平台
  2. 了解Java中的内存模型只需13张图!
  3. 旋转图片轮播html,js实现旋转图片轮播
  4. 以太坊区块链长什么样?
  5. 阿里面试题SpringBoot,出现频率较高的技术点汇总
  6. Vmware安装openfiler
  7. 看完去怼面试官,Java尊享版性能调优分享给大家
  8. 怎样用ZBrush快速雕刻皮肤纹理
  9. show engine innodb status\G
  10. js设置睡眠N秒后再执行