1、即时通讯技术
即时通讯(IM:Instant Messaging):又称实时通讯,支持用户在线实时交谈,允许两人或多人使用网络实时的传递文字消息、文件、语音与视频交流。
即时通讯在开发中使用的场景有许多,如 AOL、Yahoo IM、MSN、QQ 以及微信等聊天软件,在电商 APP 集成买家与卖家的实时沟通等。它们最大的区别在于各自通讯协议的实现,所以即时通讯技术的核心在于它的传输协议,协议是用来说明信息在网络上如何传输。
如果有了统一的传输协议,那么应当可以实现各个 IM 之间的直接通讯,为了创建即时通讯的统一标准,人们多次努力,试图统一各大主要 IM 供应商的标准(AOL、Yahoo 及 Microsoft),但无一成功,且每一种 IM 仍然继续使用自己所拥有的协议。目前已经出现过的 IM 协议包括:
- SIP :IETF 的对话初始协议,是建立 VOIP 连接的 IETF 标准,而 VOIP 就是网络电话。
- SIMPLE:即时通讯对话初始协议和表示扩展协议。
- APEX :应用交换协议。
- PRIM :显示和即时通讯协议。
- XMPP :基于 XML 且开放的可扩展通讯和表示协议,常称为 Jabber 协议。
当前实现即时通讯的方案:
- XMPP :可扩展通讯和表示协议。
- EaseMob:环信,提供即时通信的一个第三平台,是在 XMPP 的基础上进行的二次开发。
2、XMPP
2.1 XMPP 简介
1、XMPP 诞生的由来
- 设计一款全世界都使用的即时通讯协议,无论使用什么即时通讯软件,都可以互联互通。
2、XMPP 起源
最初 XMPP 作为一个框架开发,目标是支持企业环境内的即时消息传递和联机状态应用程序。
XMPP 的前身是 Jabber(1998 年),是一个开源组织定义的网络即时通信协议。
XMPP 是一个分散型通信网络,这意味着,只要网络基础设施允许,任何 XMPP 用户都可以向其他任何 XMPP 用户传递消息。
多个 XMPP 服务器也可以通过一个专门的 “服务器-服务器” 协议相互通信,提供了创建分散型社交网络和协作框架的可能性。
XMPP 协议曾经是 Google 力推的即时通信协议,其代表作品是 GTalk。
3、XMPP 概述
XMPP:The Extensible Messaging and Presence Protocol,可扩展通讯和表示协议,是一种基于 XML 的即时通讯协议,用于即时消息以及在线现场探测。
- 它继承了在 XML(可扩展标记语言)环境中灵活的发展性,这表明 XMPP 是可扩展的。
XMPP 规范了用于即时通信在网络上的数据传输格式,它的核心是 XML 流传输协议的定义,可用于服务类实时通讯、表示和需求,响应服务中的 XML 数据元流式传输。
使得 XMPP 能够在一个比以往网络通信协议更规范的平台上。借助于 XML 易于解析和阅读的特性,使得 XMPP 的协议能够非常漂亮。
XMPP 包含了针对服务器端的软件协议,使之能与另一个进行通话,这使得开发者更容易建立客户应用程序或给一个配置好的系统添加功能。
促进服务器之间的准即时操作。这个协议可能最终允许因特网用户向因特网上的其他任何人发送即时消息,即使其操作系统和浏览器不同。
XMPP 是一个典型的 C/S 架构,基本的网络形式是客户端通过 TCP/IP 连接到服务器,通过 Socket 建立连接(目的是为了保持长连接),然后在之上传输 XML 流。
XMPP 以 Jabber 协议为基础,而 Jabber 是即时通讯中常用的开放式协议。
XMPP 的技术规格已被定义在 RFC 3920 及 RFC 3921,文档定义了登录,退出,获取好友,发送消息等等的 XML 数据传输协议。
XMPP 的扩展协议 Jingle 使得其支持语音和视频,目前 iOS 尚不支持。
2.2 XMPP 基本结构
C/S 和 P2P 基本结构图
XMPP 是一个典型的 C/S 架构。
而不是像大多数即时通讯软件一样,使用 P2P 客户端到客户端的架构。
也就是说在大多数情况下,当两个客户端进行通讯时,他们的消息都是通过服务器传递的。
优点:采用这种架构,主要是为了简化客户端,将大多数工作放在服务器端进行。
XMPP 中定义了三个角色:客户端,服务器,网关。
通信能够在这三者的任意两个之间双向发生。
服务器:同时承担了客户端信息记录,连接管理和信息的路由功能。
网关:承担着与异构即时通信系统的互联互通,异构系统可以包括 SMS(短信),MSN,ICQ 等。
基本的网络形式,单客户端通过 TCP/IP 连接到单服务器,然后在之上传输 XML 流。
2.3 XMPP 工作原理
节点连接到服务器。
服务器利用本地目录系统中的证书对其认证。
节点指定目标地址,让服务器告知目标状态。
服务器查找、连接并进行相互认证。
节点之间进行交互。
2.4 XMPP 传输内容
XMPP 应用传输的是与即时通讯相关的指令。
XMPP 传输的即时通讯指令的逻辑与以往相仿,只是协议的形式变成了 XML 格式的纯文本。这不但使得解析容易了,人也容易阅读了,方便了开发和查错。
XMPP 的核心部分就是一个在网络上分片段发送 XML 的流协议。这个流协议是 XMPP 的即时通讯指令的传递基础,也是一个非常重要的可以被进一步利用的网络基础协议,可以说 XMPP 用 TCP 传的是 XML 流。
XMPP 是一种类似于 HTTP 协议的一种数据传输协议。
- 其过程就如同 “解包装 --> 包装” 的过程,只需要理解其接收的类型及返回的类型,便可以很好的利用 XMPP 来进行数据通讯。
XMPP 核心文件是基于 TCP 的 XML 流的传输,XMPPFrame 框架是通过代理的方式实现消息传递的。
XMPP 客户端获取到服务器发送过来的好友消息,客户端需要对 XML 进行解析,使用的解析框架的 KissXML 框架,而不是 NSXMLParser/GDataXML。
为了简化开发,XMPP 的引用程序通常会将 XMPPStream 放置在 AppDelegate 中,以便于全局访问。
2.5 XMPP JID
每个 XMPP 客户端用户必须拥有一个全局惟一标识符。
- 基于历史原因,这些标识符称为 Jabber ID 或 JID。鉴于协议的分布式特征,JID 应包含联系用户所需的所有信息,JID 的结构类似于电子邮件地址,但不要求 JID 同时也是有效的电子邮件收件人。
客户端和服务器节点,被统称为 XMPP 实体,都拥有 JID。例如:SomeCorp 公司的员工 John Doe 可能拥有
JID:用户名@服务器名称
。John.Doe@somecorp.com
,其中 somecorp.com 是 SomeCorp 公司的 XMPP 服务器的地址,John.Doe 是 John Doe 的用户名。
2.6 XMPP 的优缺点
1、优点
- 开放:XMPP 协议是自由,开放,公开的,并且易于了解。而且在客户端,服务器,组件,源码库等方面都已经各自有多种实现。
- 标准:互联网工程工作小组(IETF)已经将 Jabber 的核心 XML 流协议以 XMPP 之名,正式列为认可的实时通信及 Presence 技术。而 XMPP 的技术规格已被定义在 RFC 3920 及 RFC 3921。任何 IM 供应商在遵循 XMPP 协议下,都可与 Google Talk 实现连接。
- 证实可用:第一个 Jabber(现在 XMPP)技术是 Jeremie Miller 在 1998 年开发的,现在已经相当稳定,数以百计的开发者为 XMPP 技术而努力。今日的互联网上有数以万计的 XMPP 服务器运作著,并有数以百万计的人们使用 XMPP 实时传讯软件。
- 分布式:XMPP 网络的架构和电子邮件十分相像。XMPP 核心协议通信方式是先创建一个 stream,XMPP 以 TCP 传递 XML 数据流,没有中央主服务器。任何人都可以运行自己的 XMPP 服务器,使个人及组织能够掌控他们的实时传讯体验。
- 安全:任何 XMPP 协议的服务器可以独立于公众 XMPP 网络(例如在企业内部网络中),而使用 SASL 及 TLS 等技术的可靠安全性,已自带于核心 XMPP 技术规格中。
- 可扩展:XML 命名空间的威力可使任何人在核心协议的基础上建造客制化的功能。为了维持通透性,常见的扩展由 XMPPStandards Foundation。
- 弹性佳:XMPP 除了可用在实时通信的应用程序,还能用在网络管理、内容供稿、协同工具、文件共享、游戏、远程系统监控等。
- 多样性:用 XMPP 协议来建造及布署实时应用程序及服务的公司及开放源代码计划分布在各种领域。用 XMPP 技术开发软件,资源及支持的来源是多样的,使得使你不会陷于被 “绑架” 的困境。
2、缺点
- 数据负载太重:随着通常超过 70% 的 XMPP 协议的服务器的数据流量的存在和近 60% 的被重复转发,XMPP 协议目前拥有一个大型架空中存在的数据提供给多个收件人。新的议定书正在研究,以减轻这一问题。
- 没有二进制数据传输:XMPP 协议的方式被编码为一个单一的长的 XML 文件,因此无法提供修改二进制数据。因此, 文件传输协议一样使用外部的 HTTP。如果不可避免,XMPP 协议还提供了带编码的文件传输的所有数据使用的 Base64。至于其他二进制数据加密会话(encrypted conversations)或图形图标(graphic icons)以嵌入式使用相同的方法。
2.7 XMPP 开发架构
开发架构:
iOS 框架:XMPPFramework
服务器:Openfire
数据库:MySQL
3、EaseMob 环信
3.1 环信简介
环信是一个第三平台,提供即时通信(IM:Instant Messaging)的服务。
环信使用的是 XMPP 协议,它是在 XMPP 的基础上进行的二次开发,对服务器 Openfire 和客户端进行功能模型的添加和客户端 SDK 的封装。
环信的本质还是使用 XMPP,基于 Socket 的网络通信,在网络上传输的数据也是 XML。
环信内部实现了数据缓存,会把聊天记录添加到数据库,把附件(如音频文件,图片文件)下载到本地,使程序员更多时间是花到用户即时体验上。
环信内部已经实现了视频,音频,图片,其它附件发送功能。
环信使用公司可以节约时间成本,不需要公司内部搭建服务器,环信日活动量在 30 万以下,永远免费。
客户端的开发,使用环信 SDK 比使用 XMPPFramework 更简洁方便。
公司如要开发即时通讯软件,建议首选环信,环信占用市场份额较大。
3.2 环信开发架构
4、XMPP Openfire 服务器的搭建
- 具体讲解见 iOS - XMPP Openfire 服务器的搭建。
5、XMPP 的使用
- 具体讲解见 iOS - XMPP 的使用。
6、EaseMob 环信的使用
- 具体讲解见 iOS - EaseMob 环信的使用。