什么是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”是此拥有者的房间昵称)作地址。