Instant Messaging java(partII 第三章)01

 
第三章 IM 概念和 Jabber 协议
从现在开始,我们将建立一个基础的程序,在以后的章节都要使用。我们将开始开发一个基本地 jabber 服务。以此为基础,我们在以后章节增强它的功能。
3.1 一个基本的 Jabber 服务
如果你曾经写过服务类程序,一个基本的 Jabber 服务的代码设计对你来说是非常熟悉的。即使没有,也不用担心。服务类程序从根本来说是非常简单的。最大的困难和复杂度在于附加的一些特征,作为一个大规模的服务器,需要安全有效的应付多用户并发的情况。
本书中设计的 Jabber 服务是一个简单的可靠的以及遵循 jabber 协议。简单是为了我们更容易的理解和修改,因为我们感兴趣的地方以及的目的是学习典型服务器的重要特征。一旦我们明白了这些基本特征,修改和扩展是非常容易。
一个简单的 jabber 服务需要做三件事:
l       连接到客户端
l       读取 jabber xml
l       对客户端的输入作出反应
令人不可思议的是,我们实现这些事情只需要寥寥几个 java 类就可以实现。在这一节,我们建立一个基本的 jabber 服务实现这三个任务。
3.1.1 我们的目标
在开始之前,设置一个明确的目标是非常有帮助的。目标指导我们设计和实施的准则。在系统中,我们会用到以下准则:
简单—— 要求事情简单纯粹是从美学观点来看的。另外,简单的软件意味着更加可靠,容易理解和易于修改。后面的两个准则是在此基础上的。保持事物的简单性,我们将会有一个好的开端。
服从标准—— 我们开发一个 Jabber 服务的目的是明白和阐明 jabber 协议。很明晰,我们不想为了正确的实现而失去教育的意义。现在最合适的效果是介于这之间的。
容易理解—— 代码必须是容易理解的。一个混乱的难以理解的代码是很难说明问题和解释他们。我们要实现的是倾斜的代码。
便于修改—— 虽然代码是用来学习的。你可能更加希望他用在真实世界中,在许多时候,你根据你的需要修改。我们将尽量使它易于修改,无论面对什么情况。
同时也要明确我们的软件暂时不会做的事情:安全性,伸缩性,可管理性,有效性行和运行速度。一个一般快的机器就可以应付 20 个人的网络系统,足够中小部门的使用。
3.1.2 我们的服务代码
我们的代码将接受和处理来自客户端的连接,解析 xml 流,依照 jabber 命令发出 xml 流。软件的启动被严格的限制,但是当我们附加新的 jabber 协议支持,扩展了服务特性和功能。
有意思的是我们可以使得我们的软件实现 jabber 的高级功能。在第十章,他们包含了服务器安全的实现,在现有系统中嵌入 jabber 功能,集成其他企业资源。
3.1.3 基本的服务设计
我的 jabber 服务被分开为三个基本模块:
Session Pool 一个 jabber 客户服务器会话集合。每一个会话管理一个人 java.net.Socket 连接和 SessionID jabberID 等元数据。
XML 解析: xml 解析类处理输入的 jabber xml 数据,把他们转变成 java 包对象。 Xml 解析类依赖于简单 xmlAPI(SAX) 解析。
Packet 处理: 服务器对输入的 Packet 作出反应。在多数情况下,服务简单的将 Packet 路由到特定的输入终端。然而许多 Packet 必须经过处理,生成一个或多个回复 Packet
 
把所有的 Packet 对象集合到 packetQueue 进行处理 ,
 
PacketQueue 这个类是关于 Packet 对象的基本队列集合结构。 PacketQueue 参与到 Packet 处理模块对 Packet 对象的 xml 解析以及存储 Packet 对象到 PacketQueue 中。 Packet 处理把 Packets 对象一处队列并处理它们。 PacketQueue 的设计是线程安全的,允许单独的服务器线程同步处理 packetQueue
Jabber Packets —— Packets 类存储的信息数据包包含了 jabber 服务器与客户端互发 JabberXml 数据包。  
当客户端连接到服务器,基本的服务操作开始。 Server 将为此连接建立一个会话对象,并开始解析进入的 xml Xml 解析后转变成 packet 对象被推入到 packet 队列。一个 packet 处理的集合把 packet 从队列中取出,处理它们并产生输出的 packet ,使用 session 索引找到正确的 session 对象的 xml 输出流,并且输出 xml 到流中。
session 池, xml 解析,和 packet 队列在一起互相协助处理 jabber packet 。我们将在 packet 处理类中实现多个协议。现在我们提供了最基本的输入 packet 路由。我们遍历 jabber 协议知道将添加更多的 packet 处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值