XMPP 学习总结
2017-03-13 07:36
78 查看
XMPP协议:
XMPP(Extensible Messageing and Presence
Protocol:可扩展消息与存在协议)是目前主流的四种IM(IM:instant messaging,即时消息)协议之一,其他三种分别为:即时信息和空间协议(IMPP)、空间和即时信息协议(PRIM)、针对即时通讯和空间平衡扩充的进程开始协议SIP(SIMPLE)。早期为Jabber
, 后期发展为XMPP协议。
JID:
要促进消息传递,每个 XMPP 客户端用户必须拥有一个全局惟一标识符。基于历史原因,这些标识符称为 Jabber IDs,或称为 JIDs。鉴于这个协议的分布式特征,重要的是
JID 应包含联系用户所需的所有信息:不存在将用户链接到他们连接到的服务器的中央知识库。JID
的结构类似于电子邮件地址(但不要求 JID 同时也是有效的电子邮件收件人)。
JID 包含一个可选节点、一个域和一个可选资源:
[ node "@" ] domain [ "/" resource ]
比如 tan@jabber.com/res
XMPP工作原理:
基于 XMPP 的数据传输发生在一些 XML
流上,默认在端口 5222 上操作。这些 XML
流实际上是两个完整的 XML 文档,每个文档对应一个通信方向。一旦会话建立,stream 元素将打开。这个元素将封装整个通信文档。然后,一些节被注入这个文档的第二层。最后,一旦通信结束,stream 元素将关闭,形成一个完整的文档。
XMPP 协议的所有消息都是 XML 格式的,这是 XMPP 协议的另一个充满历史意味的选择,想当年 SOA / SOAP 一时间爆发起来,很多消息交换协议都采用了 XML 格式,但是不想 XML 很快就成了「大数据」的代名词。在 RFC 3920 XMPP Core 中定义了两个基础概念,XML Stream 和 XML Stanza,XML Stream 是两个节点之间进行数据交换的容器,它定义了顶层的XML节点 ;XML Stanza 则定义了实体消息的具体语义单元,在 XMPP
中定义了 3 个顶层消息:
Presence
Message
IQ
presence 可以有三种子元素:
1. show:一个机器可读的值,表示要显示的在线状态的总体类别。这可以是 away(暂时离开)、chat(可用且有兴趣交流)、dnd(请勿打扰)、或 xa(长时间离开)。
2. status:一个可读的 show
值。该值为用户可定义的字符串。
3. priority:一个位于 -128
到 127 之间的值,定义消息路由到用户的优先顺序。如果值为负数,用户的消息将被扣留。
一旦通信建立,客户端就能使用 message 元素将消息发送到另一个用户,message
元素包含以下任意子元素:
subject:一个可读的字符串,表示消息主题。
body:一个可读的字符串,表示消息体。如果每个消息体标记都拥有一个不同的 xml:lang 值,那么可以包含多个消息体标记。(xml:lang 是惟一可能的属性。)
thread:一个惟一标识符,表示一个消息线程。客户端软件可以使用这个子元素将相关消息串联在一起。
IQ:
一个典型的简单两个client之间的会话图:
XMPP(Extensible Messageing and Presence
Protocol:可扩展消息与存在协议)是目前主流的四种IM(IM:instant messaging,即时消息)协议之一,其他三种分别为:即时信息和空间协议(IMPP)、空间和即时信息协议(PRIM)、针对即时通讯和空间平衡扩充的进程开始协议SIP(SIMPLE)。早期为Jabber
, 后期发展为XMPP协议。
JID:
要促进消息传递,每个 XMPP 客户端用户必须拥有一个全局惟一标识符。基于历史原因,这些标识符称为 Jabber IDs,或称为 JIDs。鉴于这个协议的分布式特征,重要的是
JID 应包含联系用户所需的所有信息:不存在将用户链接到他们连接到的服务器的中央知识库。JID
的结构类似于电子邮件地址(但不要求 JID 同时也是有效的电子邮件收件人)。
JID 包含一个可选节点、一个域和一个可选资源:
[ node "@" ] domain [ "/" resource ]
比如 tan@jabber.com/res
XMPP工作原理:
基于 XMPP 的数据传输发生在一些 XML
流上,默认在端口 5222 上操作。这些 XML
流实际上是两个完整的 XML 文档,每个文档对应一个通信方向。一旦会话建立,stream 元素将打开。这个元素将封装整个通信文档。然后,一些节被注入这个文档的第二层。最后,一旦通信结束,stream 元素将关闭,形成一个完整的文档。
XMPP 协议的所有消息都是 XML 格式的,这是 XMPP 协议的另一个充满历史意味的选择,想当年 SOA / SOAP 一时间爆发起来,很多消息交换协议都采用了 XML 格式,但是不想 XML 很快就成了「大数据」的代名词。在 RFC 3920 XMPP Core 中定义了两个基础概念,XML Stream 和 XML Stanza,XML Stream 是两个节点之间进行数据交换的容器,它定义了顶层的XML节点 ;XML Stanza 则定义了实体消息的具体语义单元,在 XMPP
中定义了 3 个顶层消息:
Presence
Message
IQ
presence 可以有三种子元素:
1. show:一个机器可读的值,表示要显示的在线状态的总体类别。这可以是 away(暂时离开)、chat(可用且有兴趣交流)、dnd(请勿打扰)、或 xa(长时间离开)。
2. status:一个可读的 show
值。该值为用户可定义的字符串。
3. priority:一个位于 -128
到 127 之间的值,定义消息路由到用户的优先顺序。如果值为负数,用户的消息将被扣留。
一旦通信建立,客户端就能使用 message 元素将消息发送到另一个用户,message
元素包含以下任意子元素:
subject:一个可读的字符串,表示消息主题。
body:一个可读的字符串,表示消息体。如果每个消息体标记都拥有一个不同的 xml:lang 值,那么可以包含多个消息体标记。(xml:lang 是惟一可能的属性。)
thread:一个惟一标识符,表示一个消息线程。客户端软件可以使用这个子元素将相关消息串联在一起。
IQ:
一个典型的简单两个client之间的会话图:
相关文章推荐
- Android基于XMPP Smack Openfire下学习开发IM(六)总结
- Android基于XMPP Smack Openfire下学习开发IM(六)总结
- XMPP协议的学习总结(1)
- Android基于XMPP Smack Openfire下学习开发IM(六)总结
- XMPP学习总结
- xmpp学习总结
- Android基于XMPP Smack Openfire下学习开发IM(六)总结
- Android基于XMPP Smack Openfire下学习开发IM(六)总结
- Android基于XMPP Smack Openfire下学习开发IM(六)总结
- iOS xmpp学习文档总结
- Android基于XMPP Smack Openfire下学习开发IM(六)总结
- C++ Primer 学习笔记-第六章之总结
- 软件工程学习总结
- 前一段时间的学习总结
- 我的学习总结
- good,JSP学习经验总结
- 老猫的ASP.NET学习总结
- 学习ejb并配置一个简单的helloEjb是遇到问题后总结的经验。
- 一些C++连接,以及个人的C++学习总结。
- VC实例学习 (1):总结下今天学习的东西