您的位置:首页 > 其它

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之间的会话图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: