XMPP概述

网上关于XMPP的讨论的文章很多,我这边主要讲一下我自己的理解吧。

作为IM(即时通讯)的一个通用可扩展的协议,主要是为了实现客户端、服务器、网关这三种角色任意两种之间的信息传递,在XMPP协议中主要实现了消息类型的区分以及相关角色的定位

一、关于XMPP中角色的定位

XMPP的地址叫做JabberID(简写为JID),它用来标示XMPP网络中的各个XMPP实体。JID由三部分组成:domainpart,localpart和resourcepart。JID中domain是必不可少的部分。注意:domain和user部分是不分大小写的,但是resource区分大小写。

jid = [ localpart"@" ] domainpart[ "/" resourcepart]

其中domainpart是必须的,

localpart主要是用户的标识(账号),

domainpart是服务器或者网关的域名,

resourcepart则是用来区分同一用户的不同设备,一般由服务器指定。

而JID具体又可以区分为一下两类

bare JID:user@domain.tld
full JID:user@domain.tld/resource

二、消息类型的区分

在XMPP中,XML数据被组织为了一对流,每个流分别对应通信的一个方向。每个XML流均由一个开始元素、后跟XMPP节和其他顶级元素,然后是一个结束元素组成。每个XMPP节(可带有子元素及属性)均是该流的一级子元素。在XMPP连接末尾,这两个流形成了一对有效的XMPP文档。具体可以利用smack的api库的时候开启debug功能的时候看到服务器和客户端之间的通讯在发送和接收的两个流方向随着消息的通讯形成了两个完整的xml文档。

其中在通讯过程中不断增加的就是XMPP最主要的组成部分——节(Stanza)。

XMPP的节主要由<presence>、<message>和<iq>这三个组成。简略介绍一下

<presence>主要用来标识用户的在线状态的变更等

<message>主要用来进行消息的传递

<iq>即info/query,进行花名册和好友的增加等的消息

参考网址:

http://www.yunliaoim.com/im/4915.html

https://www.jianshu.com/p/77c027d87dc3

http://www.yunliaoim.com/im/4915.html

原文地址:https://www.cnblogs.com/marshwinter/p/13257282.html