Instant Messaging java(第二章)04

 
2.1.5 逐步分析:一个消息在 jabber 中的传输
设想我们有一个 jabber 客户端, jabberID是bigwig@manning.com/work 。我们发送一个 <message> 包到用户 iain ,所在的 jabber 域名是 shigelka.com 。这个包如下:
<message to=’iain@shigeoka.com’/>
然后,我们发送到我们的 mainning.com 服务器。服务器检测接受者的属性: jabberID ,隐藏的发送地址,发送包到达的目的地 shigeoka.com jabber 服务:
<message to=’iain@shigeoka.com’ from =’bigwig@mainning.com/work’/>
shigeoka.com服务得到inin@shigeoka.com 地址之后查找用户 iain 。如果在线用户没有登记 iain 这个用户,消息将存储在晚些时候发送。当资源被验证, shigeoka.com 服务能够交付一个完整的 <message>packets 到资源。下面的这个包将被接受:
<message from =’bigwig@mainning.com/work’/>
注意接受地址已经被剥离。在这个案例中,客户假设信息的地址是她自己。 Jabber 服务不必剥离接受地址因此客户将能处理包有或没有接受地址。
2.2jabber 协议的核心
jabber 协议定义了实现 Im 相关任务的一个关于数据结构的集合以及交换他们的规定。 Jabber 协议是简单和实用的,为使用者体统了强大的保证和可扩展性。他建立在普通的技术至上,例如 tpc/ip URI ,以及 XML ,因此学习曲线比较平坦。
Jabber 协议有三个核心:
Message
Presence
Info/Query
每个都是 Jabber 的重要组成。我们下面大概的论述一下:
2.2.1 Message: 发送数据
message 是一最简单 jabber 协议。在大部分的情况下,多数的包都是遵循 message 规则,因他的简单性、易用性使得它成为最好的消息模式。因为他用简单的设计逻辑设计,使得事情变得简单而且优秀变得可能。
如你所想的,在用户之间交互的 message 用的人类可识别的。这些消息能够像 email 或在线聊天。
Message 在第四章有详细介绍。
2 2.2 出席:更新用户在线状态
另外一个常常会用到的核心协议是出席协议。这个协议包括预约、核准和更新 jabber 系统的出席信息。和 Message 一样他也是设计简单的逻辑,有效的管理出席。
出席在第 5 8 章详细介绍。
2.2.3info/Query : 处理一切
IQ 协议是最后一个核心协议,如果一个协议不是 message, 也不是出席,那么它就是 IQ 协议。 IQ 是一个一般的 Request-respose 协议。它是设计简单和扩展的。
一个一般的 Iq 包的格式就如同一个普通的信封包含发生的 iq 协议的类型和查询接受者,通常是调用 IQ 句柄。 IQ 信封下是 0 个或多个 <query> 包。 <query> 包确定了一个默认地命名空间,而每个 <query> 能够包含已定义的子包。这个命名空间保证了时的 <query> 包内容避免放生明名冲突。
例如:如果一个客户端希望得到一个 IQ 回复: iq auth IQ 扩展协议,这个包看起来如下:
<iq type='get' to='handlerJID'>
<query xmlns='jabber:iq:auth'>
<username>iain</username>
</query>
</iq>
20 多个 IQ 扩展标准和协议。这些协议覆盖了 jabber 用户注册、当前时间查询的验证或服务器或客户端的版本。另外,开发人员可以自由的开发他们自己的 IQ 扩展协议,他们不能用标准 IQ 扩展协议的命名空间。
这种简单的可扩展结构允许开发人员任意的并且快捷容易的扩展 Jabber 系统。另外,因为查询的内容是一个在 XML 命名空间,并且 Jabber 路由信息外部包围 IQ ,自定义的 IQ 扩展包不需要修改 Jabber 软件就可以在 jabber 系统发送信息。仅仅接收者和处理者需要懂得扩展协议的意思。客户端或服务端不支持此扩展协议时只需发送一个错误指明不支持。
例如:设想我们创建一个 IQ 扩展协议 httP://shigeoka.com/game/character为一个jabber在线游戏 ,它为其他用户描述了在游戏中的字符。一个客户可以发送下面的 IQ 包到服务器:
<iq type='set' to='evilwizard@shigeoka.com'>
<query xmlns='http://shigeoka.com/game/character'>
<name>Mario</name>
<sex>male</sex>
<occupation>plumber</occupation>
<lives>3</lives> <level>5</level>
<score>4200</score>
</query>
</iq>
Jabber 服务器完整的接收这个包,发送到 shigeoka.com 服务器。固定的 shigeoka.com 服务把它交付给 evilwizard 用户。那个 evilwizard 的用户客户端接收到包并更新它的显示。没有哪个服务器知道自定义 IQ 包但是能够适当发送包。
现在让我们看一个具体的例子。
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值