转载:
可扩展消息处理现场协议(eXtensible Messaging and Presence Protocol , XMPP)是一种基于可扩展标记语言(eXtensible Markup Language, XML)的近端串流式即时通信协议。它将现场和上下文敏感信息标记嵌入到XML 结构化数据中, 使得人与人之间、应用系统之间以及人与应用系统之间能即时相互通信。XMPP 协议已被批准为互联网即时通信协议标准。
1 XMPP 的地址和数据结构
1.1 实体地址
XMPP 整体框架下图 所示。图中, XMPP 框架的各类实体(如XMPP 客户、服务器和网关等) 的地址称为Jabber地址(Jabber Identifier, JID)。JID 惟一确定进行即时消息和在线状态信息通信的独立对象或实体, 并可兼容其他即时通信系统( 如MSN 等) 相应的实体标识及其在线状态信息。其语法规则为: [节点″@″] 域名[″/″资源], 其中各个域的长度不能超过1 023 字节, 总长度最大为3 071 字节。
此主题相关图片如下:
域名指定了实体连接的XMPP 服务器。每个可用XMPP 服务器都拥有一个完整域名, 域名可在域名系统(DNS)中查找; 节点可表示某用户、一类应用或某项服务,所有节点都对应一个精确的域名; 资源用来识别属于用户的特殊对象(如设备或位置), 允许一个用户同时以多个资源与同一XMPP 服务器连接, 如yb@sdpt.com/lab、yb@sdpt.com/chat。
1.2 XMPP 的数据结构
由于XMPP 是基于XML 的协议, 因此用户可根据自己的需要定义标记, 表述几乎任何一种结构化数据, 并可方便地创建定制的应用或增加功能。
1.2.1 三个顶级XML 元素
XMPP 定义的3 个关键顶级XML 元素为<message/>、<presence/>和<iq/>(info/query), 每个元素都可以通过属性和名字空间包含大量数据, 其属性和名字空间都是XMPP的组成部分。
<message/>元素用来包含2 个XMPP 实体间互相发送的消息内容; <presence/>元素表示实体可用性信息, 可用性信息有“可用”和“不可用”2 种; <iq/>元素用来构建2 个
实体间的会话, 并且允许实体间来回传送XML 格式的请求和响应以便取得或设置公共的用户信息, 如名字等。
即时通信中名字冲突问题使用XML 的命名空间特性来解决。XML 命名空间定义了一种将XML 中使用的元素和属性与统一资源定位符(Uniform Resource Locator,URL)引用联系起来对元素和属性进行定义的方法。
1.2.2 XMPP 的数据结构
从结构上看, XMPP 有3 种数据: XML 流、流认证和XML 节。XML 流是实体交换XML 元素的容器,以<stream>开始, 以</stream>结束, 是通信双方采用异步方式进行数据传输的标准方法, 在整个XMPP 通信过程中处于最外层; XML 节是实体通过XML 流传输的结构化信息单元, 在XML 流中以深度为1 的子标记开头, 并以深度为1 的子标记结束, 这些标记为<message/>、<presence/>和<iq/>。XML 节也可通过包含其他子元素来传送结构化信息, 是实际需要交换的信息所在地; 流认证是在XML 流中有关协商传输层安全协议、简单认证与安全层协议和服务器回拨认证协议完成通信认证、加密等目的的数据交互, 是XMPP 安全机制的重要组成部分。
XMPP 为XML 流扮演通用“传输层”的角色。XML 流中包含传输的认证信息和现场消息, XMPP 能使数据高效路由至最合适的请求源, 并最大限度地简化客户机上的实现, 使跨应用实时交流信息成为可能。
2 工作过程
(1)节点(如yb、pt)向本地服务器连接。
①XMPP 用户通过开启一个从客户端到服务器端的XML 流, 来申请一个在服务器上的Socket 连接。
SEND: <stream: stream
to=′sdpt.com′
xmlns=′jabber: client′
xmlns: stream=′http: //etherx.jabber.org/streams′>
②服务器通过开启一个从服务器到客户端的XML 流进行回复。
RECV: <stream: stream
from=′sdpt.com′
id=′180763465′
xmlns=′jabber: client′
xmlns: stream=′http: //etherx.jabber.org/streams′>
(2)节点向本地服务器申请登录。
①用户询问登录服务器时需提供的信息。
SEND: <iq id=′2′type=′get′>
<query xmlns=′jabber: iq: auth′>
<username>yb</username>
</query>
</iq>
②服务器回应用户, 告知用户登录所需要的信息。
③用户提供所需的信息。
④服务器响应一个空的类型为“result”的iq 元素, 表明登录成功。
RECV: <iq id=′3′type=′result′/>
⑤yb 用户发送当前状态给服务器, 表明其在线。
SEND: <presence>
<status>Online</status>
</presence>
(3)用户获得花名册, 好友增加一个联系人( 如yb 获知朋友sd 在线) 。
(4)用户间发送消息( 如yb 向sd 发送消息) 。
用户发送一条消息:
SEND: <message to′sd@jabber.org′>
<body>Where are you?</body>
</message>
服务器会根据XMPP 用户的会话信息加上一个源地址, 这样接收者收到消息时, 消息中已经包含了源地址。
(5)XMPP 服务器根据目标JID 中的域名查找、连接到目标服务器并进行认证(如sdpt.com 使用DNS 查找jabber.org, 连接到jabber.org 服务器上并进行认证) 。
(6)XMPP 服务器jabber.org 证实sd 连接到该服务器上, yb 被授权与sd 进行通信。
(7)数据在yb 与sd 间流动。
(8)用户退出, 退出时只需要关闭<stream>。
3 结束语
简单的接口、开放的协议、互联的架构、权威的标准再加上坚实的用户基础是XMPP 的优势。相信XMPP 将为即时通信技术的运用提供更为广阔的空间。
分享到:
相关推荐
这个“xmpp通讯协议demo”是展示如何在Android平台上利用XMPP协议进行即时通讯的一个示例项目。它表明开发者使用了Eclipse IDE进行初始开发,并且可以转换为Android Studio(AS)项目以便于进一步的Android开发。 ...
由于XMPP协议的可扩展性,基于XMPP协议的智能家居环境监测系统能够很好地满足这一需求,使用户能够根据自己的需要灵活地构建个性化的智能家居环境。 文档中还提到了一些关于推荐系统在博物馆网站中的应用。推荐系统...
综上所述,《基于XMPP协议的P2P即时通讯软件设计》这篇论文深入探讨了即时通讯领域的重要课题,从理论到实践,全面地展示了如何利用XMPP协议和P2P技术构建高效、安全的即时通讯系统。这一研究成果对于推动即时通讯...
首先,XMPP协议是基于TCP/IP协议之上的,它定义了一种标准格式来传输数据,特别是针对即时通讯中的消息和状态信息。XMPP的核心组件包括Jabber ID(JID)、Stream、XML Stanzas和Components。JID是XMPP用户的唯一标识...
标题中的“基于XMPP协议的视频会议系统C#源码”指的是一个使用C#编程语言实现的、基于XMPP(Extensible Messaging and Presence Protocol)协议的视频会议系统。XMPP是一种开放标准的即时通讯协议,它允许用户进行...
【安卓XMPP聊天通讯Socket相关-仿微信即时聊天xmpp4Android第一期.rar】这个压缩包文件主要包含了一个基于XMPP协议实现的Android即时聊天应用的初步开发资源。XMPP(Extensible Messaging and Presence Protocol)是...
总结来说,XMPP协议是即时通讯领域的一个强大工具,它的开放性和可扩展性使得开发者可以构建出功能丰富的通信应用。通过理解并掌握XMPP的基本原理和元素,开发者可以构建出满足各种需求的即时通讯解决方案。
实现XMPP通信的第一步是建立连接。开发者需要使用C#代码创建一个连接对象,指定服务器地址和端口,并进行安全的TLS/SSL加密。接着,进行用户名和密码的认证,通常使用SASL(Simple Authentication and Security ...
XMPP协议定义了数据格式和交换规则,使得不同的客户端和服务器之间可以互相兼容。 XMPP的实现通常包括以下组件: 1. **XMPP服务器**:如ejabberd、Openfire等,它们负责处理用户注册、登录、消息转发等功能。 2. *...
Openfire是基于Java开发的一款开源服务器软件,支持XMPP协议,提供了实时通信的基础架构。在Android应用中集成Openfire,可以实现用户注册、登录、发送和接收消息、好友管理等功能。为了进行二次开发,你需要了解...
通过深入分析这个项目,开发者不仅可以掌握Android应用开发的基础知识,还能学习到XMPP协议在实际项目中的应用,这对于想从事即时通讯领域开发的工程师来说是一份宝贵的参考资料。同时,这也为学习和理解Android的...
流是XMPP协议中的基本连接,两端通过XML流建立并保持连接。Stanza则是XMPP数据传输的基本单元,类似于HTTP的请求或响应。 Openfire服务器提供了API和插件系统,方便开发者进行集成和扩展。对于Android或iOS的手机端...
文档第一章《构建即时通讯与聊天》通过XMPP展示了如何利用WebSocket的这一特性。XMPP是一种广泛用于即时消息应用中的标准协议,它支持多种不同的服务器实现、强大的功能以及已被证明的可扩展性和可扩展性。 首先,...
1. **XMPP协议介绍**:XMPP设计用于实时数据交换,包括消息、状态更新和文件传输。它基于TCP/IP连接,并通过XML流传输数据,提供灵活的扩展性。XMPP服务器如ejabberd、Openfire等负责处理客户端之间的通信。 2. **...
1. 开发版本:这可能是微信早期在开发过程中尝试使用XMPP协议的一个版本。XMPP的开放性和可扩展性可能吸引微信团队用来测试或改进其即时通讯功能。 2. 学术研究:开发者或研究人员可能为了分析、理解微信的工作原理...
1. **XMPP协议介绍** XMPP是一种基于XML的开放标准,广泛用于实现即时消息、在线状态管理以及多用户聊天。它通过TCP/IP网络提供实时双向通信,并且可以扩展以支持多种功能,如文件传输、VoIP等。 2. **Go-Hipchat...
在第一篇文章中,作者可能会介绍XMPP的原理和它的优势,以及在Android项目中设置环境的步骤。第二篇文章可能会涉及用户注册、登录、发送和接收消息的实现。最后,在第三篇文章中,可能涵盖了更高级的功能,如群聊、...
首先,"新提醒】【仿微信即时聊天】xmpp4Android 第一期-Android开发源码下载-eoe Android开发者社区_Android开发论坛 - Powered by Discuz!.pdf" 文件很可能是教程的详细步骤文档,包含了项目构建、配置、关键代码...
在本项目中,我们主要探讨的是一个基于Android平台的、使用XMPP协议的企业级办公聊天应用的源码。这个项目不仅展示了如何构建一个实时通信的应用,还涉及到了Android开发中的多个核心技术和最佳实践。 首先,让我们...