![](https://csdnimg.cn/release/download_crawler_static/4025720/bg4.jpg)
第Ⅰ部分 XMPP 协议和架构
6
最近,IETF 已经组成了一个新的 XMPP 工作组来准备 XMPP 规范的下一版本,把自从最
初的 RFC 发布以来人们获取的所有认识整合起来。XMPP 不断得到精炼和扩展,这样应用程序
开发人员和 Internet 用户将总能够拥有一个开放的、去中心化的通信协议。
1.3 XMPP 网络
任何 XMPP 网络都是由若干角色组成的。这些角色可分为服务器、客户端、组件和服务器
插件。XMPP 开发人员将编写代码来创建或修改这些角色类型中的一种。每种角色均在 XMPP
网络中发挥着各自的作用。
1.3.1 服务器
XMPP 服务器(更精确地说是使用服务器-服务器协议的 XMPP 实体或客户端-服务器协议中
的服务器端)是任何 XMPP 网络的循环系统。服务器的任务就是为 XMPP 节提供路由,无论这
些节是从内部的一个用户发往另一个用户,还是从本地用户发往远程服务器。
一组能够相互进行通信的 XMPP 服务器构成了一个 XMPP 网络。一组公开的 XMPP 服务
器形成了全局的 XMPP 联合网络。如果某个服务器不能使用服务器-服务器协议,那么它将变
成一个孤岛,不能与外部服务器通信。
XMPP 服务器总是允许用户连接到自己。但也可以编写直接使用服务器-服务器协议的应用
程序或服务,通过减轻路由开销来提高效率。
任何人都能够运行 XMPP 服务器,而且几乎所有平台都有全功能的服务器可用。Ejabberd、
Openfire 和 Tigase 是三种能够在 Windows、Mac OS X 和 Linux 系统上运行的流行的开放源代码
服务器。还有几个商业 XMPP 服务器可用,包括 M-Link 和 Jabber XCP。
1.3.2 客户端
大多数 XMPP 实体均是客户端,它们通过客户端-服务器协议连接到 XMPP 服务器。这些
实体中许多都是由人类驱动的、传统的 IM 用户,但也有一些以机器人形式运行的自动化服务。
客户端必须向某个地方的 XMPP 服务器进行身份验证。服务器将该客户端发送的所有节路
由到适当的目的地。服务器还负责管理客户端会话的其他几个方面,包括它们的花名册以及裸
地址,稍后我们就会看到。
本书中的所有应用程序均被编写为客户端应用程序。这通常是大多数 XMPP 开发的起点。
对于不需要用户参与或者有着苛刻要求的应用程序,更好的做法通常是创建一个不同类型的实
体,比如服务器组件。
1.3.3 组件
并不只有客户端能够连接到 XMPP 服务器,大多数服务器还支持外部服务器组件。这些组
件通过添加某种新服务来增强服务器的行为。这些组件在服务器内部有各自的身份和地址,但
在外部运行并通过组件协议通信。
组件协议(由 XEP-0114 定义)可以让开发人员以一种服务器不可知的方式创建服务器扩展。