最近在看移动 IM 相关的资料,然后发现网上有很多的资料,所以在学习过程中,整理了一些笔记,供那些 想了解 移动 IM 的童鞋一些参考。
1、协议选型 2、IM 服务器选型 3、协议和 IM 服务器改造 4、移动 IM 常见问题以及一些解决方案 5、一些第三方服务
经过这几天在网上的调研,发现目前比较流行的几个 IM 服务器 也就是 Openfire、Tigase, Ejabberd:
1、登录握手部分改进
Xmpp QuickStart
2、心跳改进
原先 Xmpp 使用的 Ping/Pong 40+ 字节,改进为单向 white space ping, 4 字节。
备注:心跳单向四个字节,在 Xmpp 协议下,估计应该是极限了吧。在私有协议协议下,一来一往两个字节足够。
3、文件传输
4、Presense
移动互联网环境下,不管用户是否在线,都会假设 用户永远在线。
这是因为移动网络环境导致,比如从 wifi 切换到 3G、处于地铁、WIFI 边缘地带等,如果还采用 PC 端 类似 QQ 那种方式,很可能会造成重连风暴。
5、Muc 聊天室
Muc 是聊天室协议,在业务层面进行改进,发送消息时 发送给所有用户,不管他在不在线
1、发送消息回执
在 server 端维护一个消息队列,当收到 client 发送会的消息回执时,将这个消息删掉
2、性能改进
不要使用内置的数据库,对于 Vcard 或者好友列表信息 可以考虑放到 Redis
3、如果是消息量很大的话,消息存储可以使用 Kafka(和数据库集群之间存定时拉取关系),分布式锁基于 Zookeeper,前端 LVS 做负载均衡。
1、长连接
android 平台 维护 client 到 server 的长连接
IM 或推送,建立长连接是必须的,可以节省 TCP 来回创建的开销,但断线之后,是否需要即刻重连,尤其是处于地铁、WIFI 边缘地带,可能会造成重连风暴,需要添加稍加延迟连接机制。
2、心跳包 GGSN
维护移动网 GGSN
3、消息回执处理 Ack
移动网络很容易丢包,发送、接受应加入回执处理
4、语音、图片的收发优化
大数据拆分成多个包,一个包大概 10 字节
1、环信(个人感觉选他不错), 大概是从 2013 年 4 月创立,到目前为止号称 有 6000 万注册用户,有 1000+ app 使用
2、leancloud 2013 年 9 月发布以来,已经吸引了近万移动应用和开发者加入。
如果说自己搭建一套 IM 框架的:
如果说基于现有的 IM 服务器搭建的话,个人觉得 从 IMserver 性能以及后期维护和招人成本上来看,应该是 Tigase > Openfire > Ejabberd
如果你也对 IM 感兴趣的话,可以看一看 环信的一个讲座, 对应的ppt。
当然了,由于我本人接触 IM 这块也不太久,所以肯定会有一些遗漏,欢迎大家提意见呀...