交换消息是XMPP的一个基本用途并且随之而来的是一个用户生成一个发给另一个实体的消息节。
XMPP定义的消息节语法完整格式如下:
<message
from='juliet@example.com/balcony'
to='romeo@example.net'
type='chat'
xml:lang='en'>
<subject>I implore you!</subject>
<subject xml:lang='cs'>
Úpěnlivě prosím!
</subject>
<body>Wherefore art thou, Romeo?</body>
<body xml:lang='cs'>
Pročež jsi ty, Romeo?
</body>
<thread parent='e0ffe42b28561960c6b12b944a092794b9683a38'>
0e3141cd80894871a68e6fe6b1ec56fa
</thread>
</message>
from属性:设置消息发送方自身的Full JID(node@domain/resource)
to属性: 设置消息接收方的Bare JID(node@domain),通常第一次发送方无法确知接收方的Full JID,通过服务器中转路由时由服务器根据Base JID映射接收方的Full JID。
但如果这个消息是在回复之前接收到的消息,则to属性应该包含对方完整的Full JID。
如此设计的好处在于:当to属性设定为Full JID时可以帮助服务器省却了接收者资源定位(接入定位),在一个IM服务集群环境中这种定位通常意味着一次
分布式缓存读取操作。
type属性:XMPP约定了type的枚举值,包括:
chat: 表明在一个点对点会话环境中的聊天消息。
groupchat:表明在一个多人会话环境中的聊天消息。
headline: 通常一些系统通知、警告、实时数据更新采用此类型,这类消息不期待客户端回复或响应,具有很高的实时性,不需要离线存储。
normal: 默认的消息类型(缺乏type属性时),通常表达一种要求接收方必须确认的消息,一般用于系统提示强制用户确认或取消等。
error: 表示一个错误消息,可能由服务端发送给客户端,也可能是另一个客户接收端回应给客户发送端,此类消息也不需要离线存储。
<subject>子元素:表明一个消息主题,通常客户端实现显示在聊天窗口标题栏处
<body>子元素: 消息内容部分
<subject>和<subject>都允许包含多个元素标签,不同的标签根据xml:lang表达了不同的语言(XMPP可是一个国际化协议)
<thread>子元素:用于跟踪一个会话, 该元素的作用主要在于方便客户端实现消息展示(例如:消息历史查询时按每次会话折叠显示消息),每次会话产生一个唯一的thread id,xmpp推荐采用uuid算法,具体用法可参考XEP-0201扩展协议和RFC6121。
还有一种情况是离线消息,它与正常消息的格式和处理机制又有所不同,格式如下所示:
<message from='romeo@montague.net/orchard' to='juliet@capulet.com'>
<body>
O blessed, blessed night! I am afeard.
Being in night, all this is but a dream,
Too flattering-sweet to be substantial.
</body>
<delay xmlns='urn:xmpp:delay'
from='capulet.com'
stamp='2002-09-10T23:08:25Z'>Offline Storage</delay>
</message>
离线消息中包含了一个<delay>的子元素,<delay>子元素的from记录了延迟消息的最后来源方,如上例中from为capulet.com指接收离线消息人连接的服务器,离线消息最终由该服务器发出
stamp属性记录了离线消息的存储时间,客户端实现应显示该时间而非接收到的时间。
分享到:
相关推荐
Messaging and Presence Protocol (XMPP) that provide basic instant messaging (IM) and presence functionality in conformance with the requirements in RFC 2779. This document obsoletes RFC 3921.
XMPP(可扩展通讯和表示协议)是基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线探测。这个协议可能最终允许因特网用户向因特网上的其他任何人发送即时消息。 简介:XMPP是一种基于XML的协议,它继承...
xmpp-ftw angular conversejs 克隆这个应用程序用户angluar-xmpp-services。 UI 是从 conversejs 中窃取的。 这是alpha软件
Flex实现的xmpp消息发送接收,利用xiff插件实现,可以在android、ios等手机运行,也可以直接在ie上运行
基于XMPP协议的类似QQ的即时通信demo 简单实现了 注册,登录,添加好友,删除好友,好友的通信 包括发文本,图片和声音。
表示 XMPP 消息的内容和生命周期的符号状态模型。 安装 $ npm install otalk-model-message 参考 var Message = require ( 'otalk-model-message' ) ; var msg = new Message ( ) ; 特性 .ackReceived - {Boolean} ...
支持的文件: RFC6120 :可扩展消息和状态协议(XMPP):核心RFC6121 :可扩展消息和状态协议(XMPP):即时消息和状态XEP-0198 :流管理XEP-0085 :聊天状态通知XEP-0318 :客户端启动的状态探针的最佳实践XEP-...
iris:XMPP网络库
乳液:XMPP:left-right_arrow:电报桥
XMPP体系架构 XMPP server:其内核是一个XMPP路由器,完成基本组件间的数据包交换和路由。 功能: 1.会话管理器:负责客户端会话认证,在线状态,用户联系表等 2.数据存储器(XDB):连接数据库系统,保持用户信息、...
中文版,xmpp协议之 可扩展消息出席协议:核心 RFC3920 IM即时通讯必备 助你成功
开源xmpp im客户端
vacuum-im:跨平台XMPP客户端
Psi是为经验丰富的用户设计的功能强大的XMPP客户端。 它具有高度的可移植性,可以在GNU / Linux,MS Windows,macOS,FreeBSD和Haiku上运行。 程序的用户界面在定制方面非常灵活。 例如,有“多个窗口”和“所有...
Android 基于XMPP协议IM聊天实现(客户端+服务端) 源码
XMPP(Extensible Messageing and Presence Protocol:可扩展消息与存在协议)是目前主流的四种IM(IM:instant messaging,即时消息)协议之一
XMPP模糊器 XMPP-FUZZER 是 XMPP 的模糊测试工具。 它建立在 Smack 库之上。 可惜目前只支持中文。 它最初发布在 code.google.com/p/xmpp-fuzzer 上。 共同开发者:姜峰和( ) 2009年开发。
有感于3Q大战,自己编写了一个XMPP协议的客户端,目前只实现了简单的基础功能,可以发送消息.其他功能正在开发中.默认已经注册了一个GTalk帐号供测试,大家有自己的GMail帐号也可以直接输入测试.
可扩展消息出席协议(XMPP)的完全讲解,文档附带例子,通俗易懂。
本课程使用asmack、openfire等开源...并且自己用openfire搭建服务端,通过本课程的学习,学员完全可以自己搭建和编写一个完全属于自己的IM聊天系统。在局域网和Internet都可以,只要自己有一个可访问的服务器即可。