优点:1,开放性。2,稳定性。3,跨平台。
缺点:1,数据冗余。2,不支持二进制数据。(主要考虑消息文本传输)
XMPP 规定 ,每个客户端是使用JID来作为身份标识。
[user "@"] domain ["/" resource]
XML Stanza(一段xml内容)
from 服务器基本不用 (调试的时候用)
to 转发
type 指定stanza的类型
id 对stanza做唯一标识(客户端和服务端对应)
Client
<stream: stream
to="meiaomei.com"
xmlns="jabber:client"
xmlns:stream="http://etherx.jabber.org/streams"
version="1.0">
....
</stram:stream>(结束标签后 服务器和客户端断链)
Server
<stream: stream
from="meiaomei.com"
id="someid"
xmlns="jabber:client"
xmlns:stream="http://etherx.jabber.org/stream"
version="1.0">
....
</stream:stream>
<presence
from="jackson@gmail.com"
to="jimmy@msn.com"
type="unavailable"/>
type可选参数
available(上线) unavailable(下线)
subscribe(订阅某个用户的在线状态) subscribed(授权该次订阅)
unsubscribe(取消订阅某个用户的在线状态) unsubscribed(授权该次取消订阅)
error(错误)
<presence>
<show>away</show>
<status>Having a spot of tea</status>
</presence>
show可选参数
1,chat (在线)
2,away (短时间离开)
3,xa ( 长时间离开)
4,dnd (不想被别人打扰)
<message
from="jackson@gmail.com"
to="jimmy@msn.com"
type="chat">
<boby>Hello!</body>
</message>
type可选:
normal (默认的独立消息不属于任何会话) chat(1对1回话)
groupchat(群聊) headline(客户端的头条内容 滚动条)
error(出现的错误)
IO 结构 信息查询(注册,登录,推送消息)
<iq
from="hu@gmail.com"
id="rrdfak45"
to="hu@gmail.com"
type="get">
<query xmlns="jabber:iq:roster">(查询联系人列表的意思)
</iq>
type可选参数
get (http的get) set(类似于http的post)
result(响应数据) error
<iq
from="hu@gmail.com"
id="rrdfak45"
to="hu@gmail.com"
type="result">
<query>
<item jid="jimmy@msn.com"/>
<item jid="tom@hotmail.com"/>
</query>
</iq>