协议选型
IM服务器选型
对协议和服务器做相应修改,通常来说直接拿个标准协议和开源服务器是一定不能用到生产环境的
保证消息到达率,绝不丢消息
以上4点搞定后基本就有了一个可用的IM平台上。想更上一层楼,可以对电量和流量等做进一步优化,或者研究怎样支持百万级以上的用户。
协议选型
常用做IM的协议:
IM服务器选型
常见的开源IM服务器
标准协议及IM服务器的改进
XMPP协议的问题及改进
登陆握手部分的改进:XMPPQuickStart (XEP0305)
心跳改进:Xmpp Ping/Pong (XEP0199)40+字节 -> 单向 whitespace ping 4字节
文件传输:Xmpp协议的文件传输是点对点,需要改成用http上传的server,语音视频压缩后上传
Presence:对移动互联网场景,不转发是否在线(永远在线)
Muc聊天室:Muc是群聊天协议,要改进成移动社交app中的群组,发送消息时发送给群里的所有用户,而不是只发“在线”用户,disable presence
Openfire源码级别改进
发送消息回执:java 里维护一个发送消息的队列,收到client端的回执,把消息从队列移除,在close()函数里,把未收到确认的消息存到offline msg里
离线通知插件:实现一个offline notification plugin。msgListener = new NotificationListener();OfflineMessageStrategy.addListener(msgListener);
Muc changes:java send(Packet),如果是Presence不需要broadcast.Broadcast()不是只发给在线用户,改为发送给所有用户
性能,状态数据和无线状态数据分离:不要使用内置数据库,Vcard 可以用 memorycache 提高访问速度,好友列表加载到内存 redis,提高效率(可以考虑用一台单独的server)
移动网络环境下的优化
长链接的维护:Android 平台,维护client到server的长链接,添加网络监听,service自动重启。iOS平台直接用APNS即可
心跳包 GGSN:维护移动网 GGSN 路由
消息回执处理(ack):移动网络有可能丢包,发送,接收需要加入回执机制
语音图片的收发优化:大文件分拆为多个数据包,每个包 10K 字节,如果发生失败,只需要重发一个包,而不是每次重发整个文件
流量电量优化
流量测量
uid = Process.myUid();
initRecvBytes = TrafficStats.getUidRxBytes(uid);
initSentBytes = TrafficStats.getUidTxBytes(uid);
流量优化
心跳:减小心跳包尺寸,减小发送频率,智能心跳(频率不固定,空闲时才发)
协议:roster versioning (增量),xmpp quickstart,推送更新
Transport,Compress 将xml压缩成binary,http压缩
耗电量测量
既要测量应用在前台的耗电,也要测量后台待机状态下的耗电量
耗电量优化
不要影响手机休眠:通过alram manager 触发心跳包
尽量减少网络请求:本地db,内存cache数据,只同步增量,最好一次发送多个请求
少用GPS定位:发送位置时才定位,网络定位优先
真对不同移动网络特性的优化:移动网络下下载速度大于上传速度:2G一次发送数据包不要太大,3G,4G一次发送多更省电
file upload buffer size:2G数据包 1024字节 3G,10k
file download buffer size:2G 2048 3G 30k
其他常规移动app开发优化:对访问最多的数据,直接访问而不用get/set 能减少一次函数的调用开销,常用数据结构的重用,对象缓存等。
client端各种问题及解决
数据同步
好友申请,群组邀请等的请求,数据同步需要支持离线,和断网两种情况,切换用户登录,不同设备之间同步
UI例子:位图显示效率和加载太多位图导致OutOfMemory
解决:
Image cache (Android LruCache)
Build in ThumbnailUtil vs Decode image file to thumbnail image
Call Bitmap.recycle()
ImageView,scaleType -> 尽量避免显示刷新时的二次缩放,准备几个固定比例的ImageView
支持百万以上并发
Operation system
TCP/IP
Scale Out
Session Replication
Stateless Everything (or as much as possible)
Async Everything (or as much as possible)
Big Data
Multi Data Center
环信部署图
免费获取网站建设方案及报价
没有找到您想要的信息?可以直接拨打 7*12 小时一对一资深技术支持 热线电话:010-87748857