最近在看移动IM相关的资料, 然后发现网上有很多的资料,所以在学习过程中,整理了一些笔记, 供那些 想了解 移动IM的童鞋一些参考。

移动IM技术选型要点

1、协议选型
2、IM 服务器选型
3、协议和IM服务器改造
4、移动IM常见问题以及一些解决方案 
5、一些第三方服务

一、常用的IM协议

二、IM 服务器的选择

经过这几天在网上的调研, 发现目前比较流行的几个IM 服务器 也就是 Openfire、Tigase, Ejabberd:

备注: 
详解Zoosk千万用户实时通信背后的开源技术

三、XMPP协议的问题及改进

1、登录握手部分改进

Xmpp QuickStart

2、心跳改进

原先Xmpp使用的Ping/Pong 40+字节, 改进为单向 white space ping, 4字节。

备注: 心跳单向四个字节,在Xmpp协议下,估计应该是极限了吧。在私有协议协议下,一来一往两个字节足够。

3、文件传输
- Xmpp 的文件传输采用的点对点的传输; 改进为http 上传到server

- 语音、视频压缩上传

- 图片默认下载缩略图

4、Presense

移动互联网环境下,不管用户是否在线, 都会假设 用户永远在线。

这是因为移动网络环境导致, 比如从wifi 切换到 3G、处于地铁、WIFI边缘地带等, 如果还采用PC端 类似QQ那种方式, 很可能会造成重连风暴。

5、Muc 聊天室

Muc 是聊天室协议,在业务层面进行改进, 发送消息时 发送给所有用户,不管他在不在线

四、基于Openfire 服务器的改进

1、发送消息回执

在server端维护一个消息队列, 当收到client发送会的消息回执时, 将这个消息删掉

2、性能改进

不要使用内置的数据库, 对于Vcard或者好友列表信息 可以考虑放到Redis

3、如果是消息量很大的话, 消息存储可以使用Kafka(和数据库集群之间存定时拉取关系),分布式锁基于Zookeeper,前端LVS做负载均衡。

五、移动IM的那些坑点

1、长连接

android 平台 维护client 到server的长连接

IM或推送,建立长连接是必须的,可以节省TCP来回创建的开销,但断线之后,是否需要即刻重连,尤其是处于地铁、WIFI边缘地带,可能会造成重连风暴,需要添加稍加延迟连接机制。

2、心跳包 GGSN

维护移动网GGSN

3、消息回执处理Ack

移动网络很容易丢包, 发送、接受应加入回执处理

4、语音、图片的收发优化

大数据拆分成多个包, 一个包大概10字节

六、第三方的IM服务

1、环信(个人感觉选他不错), 大概是从2013年4月创立, 到目前为止号称 有6000万注册用户, 有1000+ app使用

2、leancloud 2013 年 9 月发布以来,已经吸引了近万移动应用和开发者加入。

七、结论

如果说自己搭建一套IM框架的:
- 基本能用需要3个月
- 做的比较好需要9月到1年时间
- 做的像微信一样,那么需要2年时间

如果说基于现有的IM服务器搭建的话, 个人觉得 从IMserver性能以及后期维护和招人成本上来看, 应该是 Tigase > Openfire > Ejabberd

八、写在最后

如果你也对IM感兴趣的话,可以看一看 环信的一个讲座, 对应的ppt。

当然了, 由于我本人接触IM 这块也不太久, 所以肯定会有一些遗漏, 欢迎大家提意见呀...

移动IM开源框架对比相关推荐

  1. python web框架对比_Python六大开源框架对比

    Python 是一门动态.面向对象语言.其最初就是作为一门面向对象语言设计的,并且在后期又加入了一些更高级的特性.除了语言本身的设计目的之外,Python标准 库也是值得大家称赞的,Python甚至还 ...

  2. Everything is Serverless,从开源框架对比说起

    摘要:Everything is Serverless. 在众多云计算解决方案中,Serverless 逐渐崭露头角,受到了很多关注并且发展迅猛,今天就关于serverless 开源框架细说二三. 什 ...

  3. 系统学习深度学习(七)--主流深度学习开源框架对比

    转自:http://blog.csdn.net/u010167269/article/details/51810613,本文做了相关修改. 参考论文:<Comparative Study of ...

  4. 开源框架_跨平台开源框架对比介绍

    知识库  夕阳下你的背影 轻轻嗅探你诱人的气息 幻想远方的你就在身边 这的空气也已不再污浊 若隐若现 知识库主要记录生活,工作不断归纳总结的经验,能时刻指导我不断清空自我,处于空杯状态去面对未来和过去 ...

  5. Python六大开源框架对比:Web2py略胜一筹

    Python是一门动态.面向对象语言.其最初就是作为一门面向对象语言设计的,并且在后期又加入了一些更高级的特性.除了语言本身的设计目的之外,Python标准库也是值得大家称赞的,Python甚至还自带 ...

  6. python企业级框架_Python六大开源框架对比:Web2py略胜一筹

    Python是一门动态.面向对象语言.其最初就是作为一门面向对象语言设计的,并且在后期又加入了一些更高级的特性.除了语言本身的设计目的之外,Python标准库也是值得大家称赞的,Python甚至还自带 ...

  7. python企业级框架_Python六大开源框架对比:Web2py略胜一筹(转)

    Python是一门动态.面向对象语言.其最初就是作为一门面向对象语言设计的,并且在后期又加入了一些更高级的特性.除了语言本身的设计目的之外,Python标准库也是值得大家称赞的,Python甚至还自带 ...

  8. Serverless开源框架对比

    Kubernetes 的蓬勃发展由催生了一系列以它为基础的Serverless框架,目前开源的Serverless框架大多以Kubernetes为基础.接下来,将针对性介绍2020年应用较为广泛的几种 ...

  9. WebGIS开发四大开源框架对比

    目录 四个不同的框架的对比: 二维地图框架与GIS的关系 前端地图框架: WebGIS二维地图框架: Layer图层分为三大类: 之前给大家介绍了webgis常用的地图框架,点这里回顾一下. 本篇文章 ...

  10. 【Python】六大开源框架对比:Web2py略胜一筹

    Python是一门动态.面向对象语言.其最初就是作为一门面向对象语言设计的,并且在后期又加入了一些更高级的特性.除了语言本身的设计目的之外,Python标准库也是值得大家称赞的,Python甚至还自带 ...

最新文章

  1. No package 'libpcre' found
  2. Data Lake Analytics + OSS数据文件格式处理大全
  3. mongodb--GridFS
  4. 【谈谈IO】BIO、NIO和AIO
  5. 跨站脚本专题 XSS
  6. TODO算子-双Value类型
  7. 机器学习基础算法20-回归曲线拟合
  8. vi测试仪维修成功率高吗?_老客户维护难,转介绍更难,这16个问题你做到了吗?...
  9. macos 管理员权限 黑苹果_Mac OS X 黑苹果系统安装驱动Kext方法
  10. python tornado返回上一页 读取refer
  11. linux python3 装pip,linux 安装pip 和python3(示例代码)
  12. 网狐6603全部架设过程棋牌源码下载搭建教程
  13. 固态和机械硬盘组raid_相同大小的固态硬盘和机械硬盘组RAID1会不会影响固态硬盘的速度?...
  14. 解决Monterey12系统CleanMyMac X闪退问题
  15. RGB图转为灰度图的方法
  16. 利用Python做excel文本合并(根据左侧单元格,快速合并右侧单元格内容)
  17. 物联网开源组件安全:Node-RED白盒审计
  18. 9岁有赞:新零售业务快速增长 推新品牌扶持计划
  19. ldap服务器的虚拟属性,搭建LDAP验证服务器
  20. 内网穿透+sshpass

热门文章

  1. Fama-French 三因子模型介绍、修改与框架搭建
  2. Android开发:Android studio开发中引用图片资源(图解)
  3. win7修复计算机消失,win7系统引导文件丢失的修复妙招
  4. PAT 甲级 树(二)
  5. STM32F103C8T6模拟IIC控制4针0.96寸OLED显示屏
  6. 四面体的表面积_四面体表面积与体积的平分
  7. 栈(stack)简单实现,系统栈是如何保存函数调用信息的?
  8. SOHO中国高管建“老鼠仓”吸钱 大企成空壳谁之责?
  9. html怎么给图片加页码,在Word里,怎样让页码显示在插入的图片上?
  10. centos 安装maven