开始之前我们对
jabber
协议有一个总体了解,重点讨论其中的三个核心规则:
Message
,
presence
,
IQ
1、
Jabber Message
模式
在开始编写软件之前我们了解
jabber Message
模式是非常重要的,他主要由
4
个方面组成:
Server
:
Jabber Server
参与
Jabber
的通讯的管理。它的重要职责是为客户端提供服务,服务的内容包括
packets
的路由选择和用户管理
Client:
客户端的典型功能是向终端客户显示信息,响应用户请求。它也提供自主的功能,当作为
jabber
服务的供应者时,被称为
ChatBots
Stream
:它的概念是从服务器到客户端的网络连接是一组单向数据流。从
xml
的角度看他就是一个密闭在
<stream:stream>
中的
xml
文档。从逻辑的角度看,
Stream
结合上下文元数据,包括客户端
jabberID,
服务器
JabberID
以及唯一流
ID
和流状态组成会话。
Packets:
客户端到服务器端的
xml
片段被称为
Packets
。每一个
Packets
是自包含的经过验证的
xml
子文档。
Jabber
协议规定了这些
Packets
的格式和交换他们的适当方式。
和其它应用的服务类似,
Jabber
服务器运行于某一台电脑上并监听来自客户端的请求。
Jabber
规定
Jabber
监听端口是
5222.
安全的
Client/server
链接能通过
SSl
,在服务器的
5223
上连接。
Jabber
服务能接受其他端口,这些任由管理员设定。
虽然可以选择端口,但是大部分的
jabber
客户端默认的连接服务器还是通过
5222
和
5223
端口,因为客户端的默认配置也是这样,如果改变端口,需要修改客户端配置。
一个
Jabber
客户端创建一个连接流,向服务器端发送一个
<stream:strem>
标签。这个未关闭的标签的
ID
是要连接的服务器域名和发送请求的客户端。这是非常重要的,因为一个服务器上可以有许多
Jabber
服务。
例如,我用两个
jabber
域名:
shigeoka.com
和
manning.com
。我能够配置这个
DNS
将这个域名映射到
IP10.0.0.1
。一个客户端希望加入到
shigeoka.com
,通过域名可以找到适当的服务。得到
IP
地址和要链接的机器。其他客户可能想练接到
manning.com
同样通过域名可以实现。
Jabber
服务的
IP
地址是
10.0.0.1,
已知的虚拟了两个域名
shigeoka.com
和
manning.com
。不幸得是服务器接收端口
5222
的连接,他不知道那个域名被客户端所请求。无论如何,当第一个客户端发送一个开放的
<stream
:
stream>
标签,它会被指引到
mainning.com
。服务器能够关联到相关信息以便知到任意哪个一个客户端。
当
Jabber
服务器接受一个客户连接,他将回复客户端一个
<stream:stream>
标签,由他发出的标签标识出服务器的域名,同时赋予
Stream
一个随机的
Session ID
。当服务被关闭时服务器和客户端都可以发送一个
<stream:error>
包来说明问题。
一旦服务器和客户端建立了连接,他们根据不同的
Jabber
协议交换
jabber Packets
。在大部分的情况下,服务器在被服务器端验证之前仅仅允许客户端使用有限
jabber
协议的子集。
Jabber
没有规定验证的规则。最低限制是,大部分的服务器将允许客户使用
Jabber
注册和认证协议。
每一个客户端和服务器端可以随时关闭连接,只要发送一个
</stream:stream>
标签。
为客户端的通讯算法总结如下:
1、
在
5222
端口连接
Jabber
服务。
2、
发送一个未闭合的
<stream:stream>
到指定的服务器地址。
3、
等待服务器的
<stream:stream>
回复和流会话
ID
。
4、
用
Jabber
检验协议登录找到用户资料。
5、
发送
Jabber
包到
Jabber
服务器。
Jabber
服务路由
Packets
到适当的接收方。
6、
发送一个关闭的
</stream:stream>
关闭流。
7、
关闭网络连接。
在这个
Message
模型中,客户端仅仅需要和服务器有一个连接就可以了。这个连接在发送接收
Packets
是保持打开了状态。发送
Packets
时,
Packets
的客户地址是接收人,发送的到服务器的信息包含在共同的
xml
中。服务器负责路由
Packet
到适当最终节点。
这个简单的模型有许多的优点和弱点。