原文地址: https://xmpp.org/about/technology-overview
可扩展与表示协议(XMPP,全称Extensible Message and Presence Protocol)是一系列开源技术包括即时通讯、表示、群聊、语言和视频通讯、协作、轻量级插件、内容聚合和广义的XML数据路由等。
XMPP是由Jabber开源社区提供的一个开源、分布式的及时通讯服务的一个可行方案。XMPP有以下几个优点:
本页介绍了XMPP的各方面技术,包括规范地址、实现、入门指南和 special-purpose discussion venues。
XMPP技术关键:
XMPP核心是基于网络的XML流技术。XMPP协议首次出现在1999年的Jabber开源社区,最初被设计的目的是提供一个开放、安全、分布式的服务用于代替像ICQ、AIM和MSN。互联网工程工作小组在2004年将协议的核心列为XMPP标准。核心技术包括:
XMPP技术的核心包含在互联网工程工作小组发布的两个标准协议中:
XMPP的第一份协议(RFC 3920 和 RFC 3921)是互联网工程工作小组的XMPP工作组在2004年制定的。2011年的时候又重新修订了协议,就生成当前的新的协议规范。
有很多XMPP核心协议的实现。具体内容可以一下页面查看:
本质上,Jingle给通讯协议提供了创建、管理和关闭多媒体会话的方法。会话支持很多数据类型(例如 语言聊天、视频聊天和文件传输等)和各种协议的传输协议(例如TCP,UDP,RTP甚至XMPP本身)。在XMPP中媒体直接使用点对点或则媒体传递建立会话连接。Jingle为应用类型和数据传输提供了可插拔的框架。在语音和视频通讯中,Jingle使用即时传输协议并支持已有的多媒体技术例如会话初始化协议(SIP-Session Initiation Protocol)。 Furthermore, the semantics of Jingle signalling was designed to be consistent with both SIP and the Session Description Protocol (SDP), thus making it straightforward to provide signalling gateways between XMPP networks and SIP networks.
Jingle有多个协议规范:
群聊是基于XMPP的多方信息交换的一个类似于在线聊天室的扩展实现,即多个用户可以交换信息在同一个房间或则频道。除了标准的聊天室所具有的主题和邀请等特性外,协议还实现了一个强制的房间控制模型,包括禁言和踢人、房间名字、管理员管理、会员限制、密码限制等。因为群聊是基于XMPP的,所以不仅可以传输铭文信息也可以传递各种xml数据。
群聊规范包含一个主协议和几个副协议:
订阅功能是由 XEP-0060 规范中定义的一个发布订阅功能的通用扩展协议。协议允许XMPP主体创建一个节点实现订阅服务,并发布信息到这些节点。一个事件通知被广播到所有订阅这个节点的用户实体。订阅坚持传统的订阅者模式,可以作为各种应用的基础,包括新闻、内容聚合、丰富表现、地理定位、工作流系统、网络管理系统和其他需要事件通知的应用。个人事件协议定义在 XEP-0163 规范中,提供一个类似订阅服务的虚拟订阅服务未用户提供丰富表现、微博、社交网络和及时交互等。
订阅包含多个协议规范
订阅和个人事件协议(PEP)是传输数据结构随意的,你可以用他们传输任何数据格式,一下是一些比较流行的传输数据格式,特别是于用户即时通讯相关的丰富消息内容:
BOSH是基于HTTP实现的双向通信,BOSh模拟类似TCP的传输单元传输。对于同时需要提交和拉取数据的应用程序,BOSH比大多数其他基于http的双向传输协议例如Ajax效率更好。BOSH通过避免HTTP轮询提高效率和实现低延迟,但是并没有实现像Comet那样切块HTTP相应。到目前为止BOSH主要用于Jabber/XMPP的客户端和服务端数据交互。然后,BOSH并没有跟XMPP绑定,也可以用于其他的数据传输,等等。
BOSH规范包含两个:
以下服务内置支持BOSH:
以下独立的XMPP连接管理可以被在多个XMPP服务器中使用: