常用的标签
<stream:stream>
...
<presence>
<show/>
</presence>
<message to = "foo">
<body/>
</message>
<iq to = "bar">
<querry/>
</iq>
...
</stream:stream>
这也是xmpp中最常用的几个标签,这样的一段xml内容在XMPP协议中被叫做XML Stanzas(翻译:一节一节),大概就是表示一段XMPP协议的内容的意思,
XMPP身份标识
XMPP规定,每个客户端是使用JID来作为身份标识的:
[user"@"]domain["/"resource]
为什么要定义成这样的格式,XMPP协议定义的初衷,是为了标准化,两个系统中可能会有重名的用户,所以XMPP规定在用户名后面加上域名,这样就唯一了,resource
有可能会在PC端和手机端都登录,所以就加上resource用于区分
XML Stanzas通用属性
- from
表示这条数据是谁发送出去的,然后里面填入的值就是JID,不过服务器通常都不会信赖from里指定的是什么,不然就有可能客户端伪造另一个人发送消息,所以我们编程的时候可以加也可以不加,服务器都不会用到的,更多用于我们调试程序的时候 - to
表示发送给谁,填入的也是JID,服务器收到了一段Stanzas后会解析,然后转发,如果没有指定JID就不会转发了,就认为事发送给自己的 - type
用于指定一段Stanzas的类型,每种不同的Stanzas可选的值也是不同的 - id
Stanzas的唯一标识,客户端发送一段Stanzas给服务器,服务器也返回了一段Stanzas给客户端,那么我们怎么区分,这时候就要用ID来哦分别了,发送和响应的时候都会相对应的写个ID
stream结构
Client:
<Stream:stream
to="example.com"
xmlns="jabber:client"
xmlns:stream="123"
version="1.0">
Server
<stream:stream
from="example.com"
id="someid"
xmlns="jabber:client"
xmlns="123"
version="1.0">
这一段表示客户端与服务器之间都支持这个协议
注意到只有开始标签没有结束标签,因为在标签没有结束之前,客户端和服务器之间的会话还是存在的,发送了结束标签之后就表示客户端以服务器之间已经断连了.
Server
</stream:stream>
Client
</stream:stream>
presence结构
presence是用于表示用户的在线状态的,基本结构是
<presence
from="jackson@gmail.com"
to="jimmy@msn.com"
type="unavaiable"/>
表示jackson告诉jimmy”我下线了”
type可选属性:avaiable:我上线了.unavaiable,下线,subscribe订阅某用户的在线状态,subscribed,订阅某用户的在线状态, unsubscribe,取消订阅某用户的在线状态,unsubscribed取消订阅在线状态,error出错
<presence>
<show>away</show>
<status>Having a spot of tea</status>
</presence>
show可选参数
chat
away
xa
dnd
chat表示在线,away表示短时间不再,xa代表需要长时间离开,dnd表示不想被打扰(do not desturb)
message结构
<message
from="jackson@gmail.com"
to="jimmy@msn.com"
type="chat">
<body>hello!</body>
</message>
type 可选参数
normal
chat
groupchat
headline
error
normal:(默认的)这是一条独立消息
chat:一对一对话
groupchat:群聊对话
headline:用于在客户端上显示的头条
error:错误
- message比较多,推送基本用不到massage Stanzas
IQ结构
<iq
from=""
to=""
id= ""
type="get">
<querry xmlns=""/>
</iq>
iq和http有点类似,其中querry标签表示制定具体的查询动作,jabber:iq:roster表示获取联系人列表,from和to指定同一个JID
type可指定get,获取数据
type可选参数:get
set
result
error
还有登录,推送消息等都会用到IQ