什么是XMPP?

XMPP的前身是jabber,是一个由开源社区发起并领导开发的即时消息系统。XMPP是一种基于XML流的协议,具有高度的可扩展性,XMPP目前被IETF国际标准组织完成了标准化工作。标准化的核心结果分为两部分:

核心的XML流传输协议

基于XML流传输的即时通讯扩展应用

XMPP的核心XML流传输协议的定义使得XMPP能够在一个比以往网络通信协议更规范的平台上。借助于XML易于解析和阅读的特性,使得XMPP的协议能够非常漂亮。 XMPP的即时通讯扩展应用部分是根据IETF在这之前对即时通讯的一个抽象定义的,与其他业已得到广泛使用的即时通讯协议,诸如AIM,QQ等有功能完整,完善等先进性。

 

XMPP网络架构

    虽然XMPP并未与任何特定网络架构结合,但到目前为止,它大致上已经由一个客户/服务器的架构实现了。其中,客户端利用XMPP访问基于[TCP]连接的一个服务器,并且,服务器间也通过TCP连接进行彼此间的通信。

             XMPP

Client------------Server------------Server              

           TCP               TCP

下图为此架构的高层视图(“-”表示使用XMPP通信,“=”表示使用任何其它协议通信)

   C1----S1---S2---C3

         |

   C2----+--G1===FN1===FC1

符号表示如下:

1) C1,C2,C3 = XMPP客户端

2) S1,S2 = XMPP服务器

3) G1 = 网关:在XMPP与外部协议(非XMPP)的消息网络间转换。

4) FN1 = 外部消息网络

5) C1 = 外部消息网络的客户端

XMPP中定义了三种实体,客户端,服务器,网关。通信能够在这三者的任意两个之间双向发生。

服务器:

管理连接其他实体的会话

       实体间路由

       存储客户端数据(如:基于XMPP即时消息与出席应用的用户的联系列表)

客户端:

基本的网络实体为客户端,多数客户端通过[TCP]连接直接连到服务器,客户端与服务器的推荐连接端口为5222。

网关:

网关承担着与异构即时通信系统的互联互通

 

XMPP实体

XMPP实体可被看作是使用XMPP进行通信的任意网络端点(例如:一个网络上的ID)。任意此类实体均以一定的格式来唯一设定地址。由于历史原因,XMPP实体的地址称作Jabber标识符或JID。一个有效JID包含一套有序元素:域标识符,结点标识符,资源标识符。如:toball@dd.bbq.com/BBQ(典型的客户端),其中,toball为结点标识符,dd.bbq.com为域标识符,BBQ为资源标识符。

然而,结点类型可能不仅是客户端,举个例子,一个提供多用户聊天服务的特别聊天室,可以以<room@service>(“room”是聊天室名,“service”是多用户聊天服务的主机名)作为地址。并且,此聊天室的特别拥有者可能以<room@service/nick>(“nick”是此拥有者的房间昵称)作地址。