XMPP介绍

参考:

http://www.cocoachina.com/cms/wap.php?action=article&id=10703 

http://www.cnblogs.com/jessonlv/p/4387977.html (XMPP——xmpp协议详解、优点、缺点及优化思路)


XMPP (Extensible Messaging and Presense Protocol 前称:Jabber)协议: 可拓展消息处理现场协议是基于可拓展标记语言(XML)胡近端串流式即时通讯协议。它将现场肯上下文敏感信息标记嵌入到XML结构化数据中,使得人与人之间、应用系统之间以及人与应用系统之间能即时通讯。XMPP是基于XML架构的开放式协议。

XMPP定义为三个角色,客户端,服务器,网关。通讯能够在这三者的任意两个之间双向发生。服务器同时承担胃客户端信息记录,连接管理肯信息胡路由功能。网关承担着说异构即时通讯系统的互联互通。异构系统可以包括SMS(短信),MSN,ICQ等。基本的网络形式是单客户端通过 TCP/IP连接到单服务器,然后在之上传输XML。

优点:

1、分布式

XMPP核心协议通信方式是先创建一个stream,XMPP以TCP传递XML数据流,没有中央主服务器。任何人都可以运行自己的XMPP服务器,使个人及组织能够掌控他们的实时传讯体验

2、安全

任何XMPP协议的服务器可以独立于公众XMPP网络(例如在企业内部网络中),而使用SASL(1)及TLS(2)等技术的可靠安全性,已自带于核心XMPP技术规格中。

XMPP–>SASL–>TLS–>TCP–>IP

(1)SASL:SASL全称Simple Authentication and Security Layer,是一种用来扩充C/S模式验证能力的机制。在Postfix可以利用SASL来判断用户是否有权使用转发服务,或是辨认谁在使用你的服务器。SASL提供了一个通用的方法为基于连接的协议增加验证支持,而XMPP使用了一个普通的XML名字空间来满足SASL的需要

(2)TLS:安全传输层协议(TLS)用于在两个通信应用程序之间提供保密性和数据完整性。该协议由两层组成: TLS 记录协议(TLS Record)和 TLS 握手协议(TLS Handshake)。

3、可扩展

XML命名空间的威力可使任何人在核心协议的基础上建造定制化的功能。

在XMPP 中,即时消息和到场信息都是基于XML 的结构化信息,这些信息以XML 节(XML Stanza)的形式在通信实体间交换。XMPP 发挥了XML 结构化数据的通用传输层的作用,它将出席和上下文敏感信息嵌入到XML 结构化数据中,从而使数据以极高的效率传送给最合适的资源。基于XML 建立起来的应用具有良好的语义完整性和扩展性。

4、弹性佳

XMPP除了可用在实时通信的应用程序,还能用在网络管理、内容供稿、协同工具、文件共享、游戏、远程系统监控等,应用范围相当广泛。

5、多样性

用XMPP协议来建造及布署实时应用程序及服务的公司及开放源代码计划分布在各种领域;用XMPP技术开发软件,资源及支持的来源是多样的,使得使你不会陷于被“绑架”的困境

6、分布式的网络架构

xmpp协议的实现,都是基于client/server的网络架构。但是xmpp协议本身并没有限定非此架构不可,其和电子邮件的架构非常相似,但是其又不仅限于此,所以其应用范围十分广泛!

缺点:

1、使用的是http协议, 需要长连接 

2、传输的数据包较大。采用base64编码

XMPP过程

(1)节点(client1)连接到服务器;

(2)服务器利用本地目录系统中的证书对其认证;

(3)节点指定目标(client2)地址,让服务器告知目标状态;

(4)服务器查找、连接并进行相互认证;

(5)节点之间(client1与client2)进行交互.

XMPP网关:

XMPP 突出的特点是可以和其他即时通信系统交换信息和用户在线状况。由于协议不同,XMPP 和其他系统交换信息必须通过协议的转换来实现,目前几种主流即时通信协议都没有公开,所以XMPP 服务器本身并没有实现和其他协议的转换,但它的架构允许转换的实现。实现这个特殊功能的服务端在XMPP 架构里叫做网关(gateway)。目前,XMPP 实现了和AIM、ICQ、IRC、MSN Massager、RSS0.9 和Yahoo Massager的协议转换。由于网关的存在,XMPP 架构事实上兼容所有其他即时通信网络,这无疑大大提高了XMPP 的灵活性和可扩展性。

从这个角度来讲,xmpp网关就是xmpp向外暴露了一个可以兼容其他主流通讯协议的一个接口(某种意义上来说)基于此,我们可以自己实现相应的通信协议来实现xmpp与本协议的相互转换和通信,类似于一个充电器的转换接口,可以适配不同类型的手机一样。

XMPP地址格式:

一个实体在XMPP网络结构中被称为一个接点,它有唯一的标示符jabber identifier(JID),即实体地址,用来表示一个Jabber用户,但是也可以表示其他内容,例如一个聊天室.

一个有效的JID包括一系列元素:

域名(domain identifier);

节点(node identifier);

源(resource identifier).

它的格式是node@domain/resourcenode@domain,类似电子邮件的地址格式.domain用来表示接点不同的设备或位置,这个是可选的,例如a在Server1上注册了一个用户,用户名为doom,那么a的JID就是doom@serverl,在发送消息时,指明doom@serverl就可以了,resource可以不用指定(是可选的),但a在登录到这个Server时,a的JID可能是doom@serverl/exodus(如果a用Exodus软件登录),也可能是doom@serverl/psi(如果a用psi软件登录).资源只用来识别属于用户的位置或设备等,一个用户可以同时以多种资源与同一个XMPP服务器连接。

XMPP消息格式:

XMPP定义了三个节点元素:Message,Presence,IQ

Message:

用于两个用户之间发送信息,Jsm(jabber会话管理器)负责满足所有的消息,不管目标用户的状态如何。如果用户在线jsm立即提交;否则jsm就存储。

To :标识消息的接收方。

from : 指发送方的名字或标示(id)o

Text: 此元素包含了要提交给目标用户的信息

Presence:

用来表明用户的状态,online,away等 当用户改变状态时会在stream的上下文中插入一个Presence元素,以表明自己状态。

presence 元素可以取下面几种值: 

1、Probe :用于向接受消息方发送特殊的请求               2、Subscribe:当接受方状态改变时,自动向发送方发送presence信息。

IQ:

一种请求/响应机制,从一个实体从发送请求,另外一个实体接受请求,并进行响应.例如,client在stream的上下文中插入一个元素,向Server请求得到自己的好友列表,Server返回一个里面是请求的结果.

iq 主要的属性是type。包括:

Get :获取当前域值。

Set :设置或替换get查询的值。

Result :说明成功的响应了先前的查询。

Error: 查询和响应中出现的错误。

你可能感兴趣的:(XMPP介绍)