1. 什么是XMPP
XMPP(eXtensible Messaging and Presence Protocol)是一种用来在两个地点之间传递小型结构化数据的协议。XMPP最常用的使用场景就是即时通信,而这也是XMPP特点的最好体现。在XMPP上交换的数据是XML格式的,这使通信具备良好的可扩展性。
2. XMPP寻址
XMPP网络上每个实体都具有一个或多个地址(JID,jabber indentifier)。JID由三个部分组成:节点,域和资源。例如:danis@fabric.local/iphone。
- 节点: “danis”便是一个节点,用来识别域中的一个特定用户,多人聊天服务将每个聊天室显示为一个JID,而节点部分指向聊天室。
- 域:fabric.local 是域,域是实体可解析的DNS名称,也就是说,可以通过域来寻址处于网络中的实体,所以域是必须的。
- 资源:/iphone则是资源,通常用于标识一个特定的客户端,/iphone则表示用iphone登录
3. XMPP节点
在XMPP中,各项工作都是通过发送和接收数据流来完成的,而XMPP核心由三种基本的节点组成<presence>,<message>,<iq>。三种节点有各自的用途,适当的组合可以完成复杂的任务.
1
2
3
4
5
6
7
8
9
10
|
<stream:stream>
<iq type=
'get'
>
<query xmlns=
'jabber:iq:roster'
/>
</iq>
<presence/>
<message to=
'sherry@coco.lit'
from=
'danis@coco.lit'
type=
'chat'
>
<body>Go to have a breakfirst</body>
</message>
<presence type=
'unavailable'
/>
</stream>
|
- <stream:stream>:创建了一个XMPP流
- iq:进行查询
- message:则是一条信息
- presence:出席,告诉服务器他在线并可以访问,<presence:unavailable>告诉服务器他不可访问
- </stream>:关闭<stream:stream>元素,结束会话
(1). presence
<presence>控制并报告实体的可访问。
1
2
3
4
5
6
7
|
<presence>
<show>away</show>
<status>playing basketball</status>
</presence>
|
<show>用来传达用户的可访问性
<status>为可读的自然语言
(2). message
<message>用来实体和实体发送消息,这些消息可以是任何类型的结构化信息
(3). iq
<iq>: Info/Query,XMPP提供的请求/响应机制,和HTTP协议的工作原理类似。可以主动向实体进行查询。<iq> 有四种type:’get’,’set’,’result’,’error’