即时通讯技术(IM)
支持用户在线交谈,如果要发送一条消息,用户需要打开一个小窗口,以便于让用户机器朋友在其中输入信息并让交谈双方都看到交谈的内容
XMPP起源
XMPP是一种基于XML的协议,它继承了在XML环境中灵活的发展性。这表明XMPP是可扩展的。可以通过发送扩展的信息来处理用户的需求,以及在 XMPP的顶端建立如内容发布系统和基于地址的服务等应用程序。而且,XMPP包含了针对服务器端的软件协议,使之能与另一个服务器进行通话,这使得开发者更容易建立客户应用程序或给一个配置好的系统添加功能
XMPP的核心XML流传输协议的定义使得XMPP能够在一个比以往网络通信协议更规范的平台上。借助于XML易于解析和阅读的特性,使得XMPP的协议能够非常漂亮
XMPP的即时通讯扩展应用部分是根据IETF在这之前对即时通讯的一个抽象定义的,与其他业已得到广泛使用的即时通讯协议,诸如AIM,QQ等有功能完整,完善等先进性
XMPP的扩展协议Jingle使得其支持语音和视频,目前iOS尚不支持
XMPP的官方文档RFC 3920
XMPP协议曾经是Google力推的即时通信协议,其代表作品是GTalk
Google Talk(GTalk)
Google Talk是Google的IM工具,除了具有IM功能外,另外还加上了Viop功能,“界面清新大方”,可直接链接Gmail,接受查看邮件
由于Google Talk是基于Jabber开源标准,这种标准允许用户和其它的即时讯息系统相连,比如苹果电脑的iChat,GAIM,Trillian Pro以及Psi。Google Talk只能够在Windows平台上运行
Google Talk的用户无法使用这种软件与AIM,MSN Messenger或者雅虎Messenger的用户进行互通
GTalk即将退出历史舞台
2013年5月,在Google I/O大会上,Google推出统一跨平台聊天应用Hangouts(环聊)取代Google Talk
XMPP定义
XMPP:The Extensible Messaging and Presence Protocol(可扩展通讯和表示协议)
XMPP可用于服务类实时通讯、表示和需求响应服务中的XML数据元流式传输。XMPP以Jabber协议为基础,而Jabber是即时通讯中常用的开放式协议
XMPP是基于XML的协议,用于即时消息(IM)以及在线现场探测。促进服务器之间的准即时操作。这个协议可能最终允许因特网用户向因特网上的其他任何人发送即时消息,即使其操作系统和浏览器不同
XMPP的基本结构
XMPP是一个典型的C/S架构,而不是像大多数即时通讯软件一样,使用P2P客户端到客户端的架构,也就是说在大多数情况下,当两个客户端进行通讯时, 他们的消息都是通过服务器传递的。采用这种架构,主要是为了简化客户端,将大多数工作放在服务器端进行
XMPP中定义了三个角色,客户端,服务器,网关。通信能够在这三者的任意两个之间双向发生
服务器同时承担了客户端信息记录,连接管理和信息的路由功能
网关承担着与异构即时通信系统的互联互通,异构系统可以包括SMS(短信),MSN,ICQ等
基本的网络形式是单客户端通过TCP/IP连接到单服务器,然后在之上传输XML流
XMPP工作原理
节点连接到服务器
服务器利用本地目录系统中的证书对其认证
节点指定目标地址,让服务器告知目标状态
服务器查找、连接并进行相互认证
节点之间进行交互
传输内容
XMPP应用传输的是与即时通讯相关的指令。在以前这些命令要么用二进制的形式发送(比如QQ),要么用纯文本指令加空格加参数加换行符的方式发送(比如MSN)
而XMPP传输的即时通讯指令的逻辑与以往相仿,只是协议的形式变成了XML格式的纯文本。这不但使得解析容易了,人也容易阅读了,方便了开发和查错
而XMPP的核心部分就是一个在网络上分片段发送XML的流协议。这个流协议是XMPP的即时通讯指令的传递基础,也是一个非常重要的可以被进一步利用的网络基础协议。可以说,XMPP用TCP传的是XML流
XMPP的优点
优点
开放
标准(XMPP的技术规格已被定义在RFC 3920及RFC 3921)
证实可用
分散
安全
可扩展
缺点
数据负载过重
没有二进制传输
通讯的实现
建立通道
连接服务器
连接成功
验证成功
发送上线状态
通道收到状态事件
通道收到消息事件
XMPP框架常用扩展
XEP-0045: 多用户聊天
XEP-0060: 发布-订阅
XEP-0065: SOCKS5字节流
XEP-0085: 聊天状态通知
XEP-0096: 文件传输
XEP-0172: 用户昵称
CoreDataStorage: 数据存储
Reconnect:重新连接
Roster:花名册
xmpp的传输小结
XMPP是一种类似于HTTP协议的一种数据传输协议,其过程就如同“解包装--〉包装”的过程。只需要理解其接收的类型及返回的类型,便可以很好的利用XMPP来进行数据通讯
XMPP核心文件
XMPPStream:是开发过程中最主要交互的类,所有扩展和自定义代码均要基于此类进行
XMPPParser:供XMPPStream解析使用
XMPPJID:提供了一个不可变JID的实现,遵守NSCopying协议和NSCoding协议
XMPPElement:以下三个XMPP元素的基类
XMPPIQ:请求
XMPPMessage:消息
XMPPPresence:出席
XMPPModule:开发XMPP扩展时使用
XMPPLogging:XMPP的日志框架
XMPPInternal:整个XMPP框架内部使用的核心和高级底层内容
网友评论