移动IM开发学习<1>
来源:互联网 发布:单机手游 知乎 编辑:程序博客网 时间:2024/05/16 08:47
一.通讯方式
IM通讯方式有两种选择:设备直连(P2P)和通过服务器中转。
1.P2P
P2P多见于局域网内聊天工具,典型的应用有:飞鸽传书,天网Maze等。这类软件在启动后一般做两件事情:
- 进行UDP广播:发送自己信息和接受同局域网内其他端信息
- 开启TCP监听:等待其他端进行连接
这种方式在有种种限制和不便:一方面它只适合在线的点对点消息传输,而对离线,群组等业务支持不够。另一方面由于 NAT(网络地址转换) 的存在,使得不同局域网内机器互联的难度大大上升,在某些网络类型(对称NAT)下无法建立连接。
2.服务器中转
几乎所有互联网IM产品都采用服务器中转这种方式进行消息传输,相对于P2P的方式,它有如下的优点:
- 能够支持更多P2P无法支持或支持不好的业务,如离线消息,群组,聊天室服务
- 方便业务逻辑的拓展和新旧版本的兼容
当然它也有自己的问题:服务器架构复杂,并发要求高。
二.网络连接方式
IM主流网络连接方式有两种:
- 基于TCP的长连接
- 基于HTTP短连接PULL的方式
后者常见于WEB IM系统(当然现在很多WEB IM都是基于WebSocket实现),它的优点是实现简单,方便开发上手,问题是流量大,服务器负载较大,消息及时性无法很好地保证,对大规模的用户量支持不够,比较适合小型的IM系统,如一个小网站的客户系统。
基于TCP长连接则够更好地支持大批量用户,问题是客户端和服务器的实现比较复杂。当然也还有一些变种,如下行使用MQTT进行服务器通知/消息的下发,上行使用HTTP短连接进行指令和消息的上传。这种方式能够保证下行消息/指令的及时性,但是在弱网络下上行慢的问题还是比较严重。早期的来往就是基于这种方式。
三.协议选择
IM协议选择原则一般是:易于拓展,方便覆盖各种业务逻辑,同时又比较节约流量。后一点的需求在移动端IM上尤其重要。
常见的协议有:
- XMPP
- SIP
- MQTT
- 私有协议
XMPP协议的优点在于:协议开源,可拓展性强,在各个端(包括服务器)有各种语言的实现,开发者接入方便。但是缺点也是不少:XML表现力弱,有太多冗余信息,流量大,实际使用时有大量天坑。
SIP协议多用于VOIP相关的模块,是一种文本协议,由于我并没有实际用过,所以不做评论,但从它是文本协议这一点几乎可以断定它的流量不会小。
MQTT的优点是协议简单,流量少,但是它并不是一个专门为IM设计的协议,多使用于推送。
而市面上几乎所有主流IM APP都是是使用私有协议,一个被良好设计的私有协议一般有如下优点:高效,节约流量(一般使用二进制协议),安全性高,难以破解。缺点则是在开发初期没有现有样列可以参考,对于设计者的要求比较高。
一个好的协议需要满足如下条件:高效,简洁,可读性好,节约流量,易于拓展,同时又能够匹配当前团队的技术堆栈。基于如上原则,我们可以推出: 如果团队小,团队技术在IM上积累不够可以考虑使用XMPP或者MQTT+HTTP短连接的实现。反之可以考虑自己设计和实现私有协议。
上面就是一个IM系统大致的选型过程:通讯方式,连接方式,协议选择,协议设计。
- 移动IM开发学习<1>
- 移动IM开发学习<2>
- 移动IM开发学习<3>
- 移动IM开发学习<4>
- 移动IM开发学习<5>
- 移动 IM 学习笔记
- 移动IM开发那些事
- 学习IM软件开发
- 移动IM开发之技术选型
- 移动 IM 开发之心跳
- 移动应用(手机应用)开发IM聊天程序解决方案
- 移动应用(手机应用)开发IM聊天程序解决方案
- 移动端IM的APP的开发技术
- 移动IM开发那些事:技术选型和常见问题
- 移动IM开发那些事:技术选型和常见问题
- 移动IM开发那些事:技术选型和常见问题
- 微信,QQ这类移动开发IM app怎么做?
- 新手入门一篇就够:从零开发移动端IM
- 2015ACM北京网赛B题 hihoCoder#1228 Mission Impossible 6
- 百灯熄灭问题--数组的应用
- 配置SQl Server 2008R2端口号详解
- Unity UGUI 新手指引
- C
- 移动IM开发学习<1>
- 开机动画,水滴波纹
- Pykd——Python extension for WinDbg
- nyoj 63 小猴子下落【二叉树】
- iOS学习笔记--如何使九宫格布局图片的显示自适应大小
- 单片机IO口模拟SPI四种模式的程序
- 测试显示性能-基于Android M 开发者预览版
- CSS盒模型
- 循环神经网络(RNN, Recurrent Neural Networks)介绍