Instant Messaging java(partII 第三章)01

本文介绍如何构建一个基础的Jabber服务,包括连接客户端、解析XML流及响应输入等核心步骤。通过简单的代码实现,使读者了解Jabber协议的基础特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 
第三章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连接和SessionIDjabberID等元数据。
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将为此连接建立一个会话对象,并开始解析进入的xmlXml解析后转变成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、付费专栏及课程。

余额充值