(模式识别与智能系统专业论文)基于移动平台的多人游戏系统设计.pdf_第1页
(模式识别与智能系统专业论文)基于移动平台的多人游戏系统设计.pdf_第2页
(模式识别与智能系统专业论文)基于移动平台的多人游戏系统设计.pdf_第3页
(模式识别与智能系统专业论文)基于移动平台的多人游戏系统设计.pdf_第4页
(模式识别与智能系统专业论文)基于移动平台的多人游戏系统设计.pdf_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

摘要 随着移动通信的发展,新的移动增值服务不断出现。在这些增值服务中。移 动游戏应用在为用户提供了新的娱乐手段的同时,也为运营商带来巨大的利润。 本文运用j a 、,a 语言,设计开发了一套完整的多人移动游戏系统。在系统开 发过程中,研究并解决了移动应用客户端软件面临的内存空间有限、内存分配方 式的变化、多线程的使用和递归到循环的转化等问题。为了实现服务器主动向客 户端发送信息和保证系统各个部分同步,本设计在h t t p 协议的基础上,补充定义 了游戏系统专用的协议。这一协议主要包含两部分:命令消息和状态转换机制。 命令消息是整个系统的基础,系统中服务器和客户端遵循命令消息表进行信息交 换。通过有统标准命令消息,系统中的两大部份协同工作,从而使服务器与客 户端,保客户端之间保持同步。这一协议中轮询请求的部分使服务器能够主动地 向客户端发送信息。客户端发送命令消息,并根据服务器的响应遵循状态转换机 制改变自身状态。 系统可以实现多个用户分组参与多个游戏,这些分组的用户在不同的游戏中 互不影响,同时进行娱乐。经过测试,本系统能够满足用户娱乐的需求。系统结 构紧凑、运行稳定。通过对本系统进行有限的修改就可以实现同类的其他游戏, 这为进一步的研究与开发提供了良好的基础。 关键字:移动应用;多人游戏;m i d p ;j 2 m e ; a b s t r a c t w i t ht h ed e v e l o p m e n to f m o b i l ec o m m u n i c a t i o ns y s t e m ,f l e wi n c r e m e n ts e r v i c e s a p p e a rc o n t i n u a l l yr e c e n t l y a m o n gt h e s es e r v i c e s ,m o b i l eg a m ea p p l i c a t i o n sw i nn o t o n l yh i g hp r o f i tf o ro p e r a t o r s ,b u tb r i n gc o n s u m e r sn e wm e t h o do f e n t e r t a i n m e n ta s w e l l r e i n f o r c e db yj a v a t e c h n o l o g y , a l li n t e g r a t e dm u l t i p l a y e rm o b i l eg a m es y s t e m w a sf i n i s h e di nt h i sa r t i c l e i nt h i sp r o c e s sas e r i a lo fp r o b l e m s s u c ha st h el i m i t e d r a m ,t h ec h a n g eo fm e m o r ya l l o c a t i o n ,t h eu s a g eo fm u l t i t h r e a da n dt h e t r a n s f o r m a t i o nf r o mr e c u r s i o nt oc i r c u l a t i o n ,w e r er e s e a r c h e da n dr e g o i v e d i no r d e r t or e a l i z et h ea c t i v ei n f o r m a t i o nt r a n s p o r t a t i o na n dk e e pa l lp a r t ss y n c h r o n o u s ,a s p e c i a lp r o t o c o lb a s e do nh t t pi se s t a b l i s h e d t h e r ea l et w om a i ns e g m e n t si nt h i s p r o t o c o l :m e s s a g ea n ds t a t e m e n tt r a n s i t i o nm e c h a n i s m m e s s a g ei st h ef o u n d a t i o no f t h i ss y s t e m a l ls u b s y s t e m sr u na l o n gw i t hi tt ok e e pt h e ms y n c h r o n o u s p o l l i n gi n t h i sp r o t o c o lm a k e si ti sp o s s i b l et h a tt h es e r v e rc a l ls e n di n f o r m a t i o nt oc l i e n ta c t i v e l y t h ec l i e n t ss e n dm e s s a g e sa n dc h a n g et h e i rs t a g a n e n ta c c o r d i n gt ot h er e s p o n s eo f t h e s e f v e r t h i ss y s t e ma c c e p t sc l i e n t se n j o y i n gg a m ew i t h o u ti n t e r f e r i n ge a c ho t h e ri n s e v e r a lg r o u p s u s e r sd e m a n dw a ss a t i s f i e di nt h et e s tr u n n i n g t h i ss y s t e mi s r u n n i n gs t e a d i l ya n d h a sac o m p a c ts t r u c t u r e i tm a k e sp r e p a r a t i o nf o rf i l r t h e rd e v e l o p m e n t b e c a u s ei tc a nb eu s e di ni m p l e m e n t i n gs i m i l a rs y s t e m sa f t e ral i m i t e dm o d i f i c a t i o n k e y w o r d :m o b i l ea p p l i c a t i o n ,m u l t i p l a y e rg a m e ,m x d p , j 2 m e 独创性声明 本人声明所呈交的学位论文是本人在导师指导下进行的研究工作和取得的 研究成果,除了文中特别加以标注和致谢之处外,论文中不包含其他人已经发表 或撰写过的研究成果,也不包含为获得丕鲞盘堂或其他教育机构的学位或证 书而使用过的材料。与我一同工作的同志对本研究所做的任何贡献均己在论文中 作了明确的说明并表示了谢意。 学位论文作者签名: 脸患 签字日期:扣6年胃月1 寻日 学位论文版权使用授权书 本学位论文作者完全了解盘洼盘堂有关保留、使用学位论文的规定。 特授权盘壅盘堂可以将学位论文的全部或部分内容编入有关数据库进行检 索,并采用影印、缩印或扫描等复制手段保存、汇编以供查阅和借阅。同意学校 向国家有关部门或机构送交论文的复印件和磁盘。 ( 保密的学位论文在解密后适用本授权说明) 学位论文作者签名:导师签名: 亏新掌 签字日期:三。年孑月2 孑日 签字日期:莎占年护月巧臼 第一章绪论 1 1 课题研究背景 第一章绪论 经过第三次革命,人类进入了信息社会。作为信息载体的媒体,也由报纸发 展到了网络。目前,有线网络技术已经比较成熟。从传统的电话网络到最近开始 普及的数字化有线电视网络,都在使用计算机网络的成熟技术。技术的成熟使无 线网络走到网络技术的前沿成为可能。从无线局域网到无线广域网,生活在当今 时代的人,从这些新兴技术中获得的利益和取得的进步,达到了前所未有的程度。 今天的人们可以通过网络生活、学习和娱乐。 移动通信网络作为无线网络中的一类,也获得了巨大的发展 1 。移动网络 发展带来的巨大市场,为终端设备制造商和运营商提供了竞争的平台,而用户则 从这种竞争中获利。这种利益包含更多的服务和更便宜的价格等。 终端设备制造商为了抢占市场,不停的推出新的终端 2 。各种新的智能手 机、个人数字助理不断的出现在市场上。从最早的单色屏幕,只能显示文字这一 单一的媒体,到今天的彩色屏幕、可以显示或者播放多媒体信息。终端功能的增 强为运营商提供更新更好的服务提供了可能。出于同样的目的,运营商在提供语 音服务的同时,不断推出新的增值服务。从最早的无线寻呼,到今天的图铃下载, 这些服务为用户带来了生活的便利。可以相信在不远的将来,移动网络将成为个 人生存在信息社会不可缺少的工具。随着这种需要,移动设备也会越来越人性化, 不同的移动应用系统也会逐步出现。运行于人性化的终端之间的,各种功能的移 动应用系统,将成为新的服务的载体。这些系统在给用户带来便利的同时,也会 为终端设备制造商和运营商带来巨大的市场。 竞争导致的多元化带来了另一个阔题。无论是终端设备制造商还是运营商都 试图推广自行制定的标准,借此来抢占市场。这就造成了厂商各自为政的局面。 就国内而言,主要的设备制造商生产的终端参数不尽相同。运营商提供的服务也 不尽相同。作为用户,迫切的需要一个统一一的平台,无论是用什么设备,运行于 哪个运营商,都可以正常的使用。 j 2 m e 正是作为这样一个平台出现的。作为j a v a 三大平台之一,主要面向资 源有限的电子设备,例如手机、个人数字助理等。通过j a v a 的跨平台特性。j 2 m e 实现的应崩系统,可以很好的解决不同的设备在使用上的差异。 基于j a v a 的移动应用发展趋势之一就是网络化。通过对网络的使用,用户 与服务者之间,用户与用户之间,可以更快捷、更安全、更方便的交换信息。目 第一章绪论 前基于移动网络的应用,受到终端、服务的质量与价格,网络环境,用户的使用 习惯等众多条件的限制,还没有被充分的研究。本文通过一个完整的基于移动网 络的多人游戏系统的设计与实现,对移动网络应用程序设计开发中的相关问题进 行探讨,可为类似应用系统的开发提供些有益的借鉴。 1 2 课题研究现状 基于j a v a 的软件下载是移动增值服务的组成部分。而这些软件主要是各种 游戏。目前,j a v a 应用的开发与研究,主要集中于本地应用。可以下载运行的 基于j a v a 的手机游戏很多。这些游戏的统一特点是下载后就不再使用网络。用 户通过服务商发送定制要求后,服务商将用户定制的软件通过移动网络发送到用 户。用户收到软件后,在本地运行的过程中,不再使用网络。这类游戏软件占据 了移动游戏的绝大部分。 在游戏过程中使用网络的移动游戏目前很少,这类游戏的主要特点是在游戏 的过程中需要从服务器下载将要出现的场景。这类游戏使用h t t p 协议,客户端 软件每次下载场景前发出请求,然后接收响应返回的场景信息用于进一步处理。 这样做的优点仅仅是减小了客户端的软件所占存储容量。因为这种机制并没有突 破h t t p 协议无状态的特点,并没有使客户端与服务器端可以迸行即时交互。游 戏系统仍旧是简单的请求响应工作模式:被动的服务器不能主动向客户端发送 信息。 对于h t t p 协议的缺点,目前解决的方式有如下几种。第一,使用更先进的 动终端。更先进得移动终端支持t c p 甚至u d p 协议,用户可以通过更新设备达到 目的。目前在2 0 0 0 年左右移动设备开始流行的时候进入市场的用户已经完成了 终端的更新换代,为了某一项服务而大规模更换终端显然是不现实的。这就限制 了t c p 等较低层协议的使用;第二、使用终端生产商的软件或者硬件扩充。终端 生产商通过将支持t c p 等协议的软硬件系统安装在基本的终端上,实现了对摹本 终端的补充和增强。这样做带来了软件的兼容性问题。为扩充过的终端设计的软 件,不能在普通的终端运行。而且这样的做法如果大规模的推广,生产商之问冈 为竞争会选用不同的软硬件,这样又会导致扩充后的设备之间不兼容。因此这样 做也只能应用于少数软件系统。 基于上述原因,有必要找到一种解决方案,在现有的设备可以被充分利用f | i 且保证软件兼容的情况下,尽可能实现t c p 协议的交互功能。 1 3 课题主要研究内容 第一章绪论 本文研究并实现一个基于j a v a 语言的,运行于移动通信网络的多人游戏系 统。主要研究内容如下: l 、目前,支持j a v a 的移动终端很多,诺基亚、摩托罗拉等著名公司生产的 终端都在其中。但是大量的设备遵循的移动信息设备的简表( m i d p ,m o b i l e i n f o r m a t i o nd e v i c ep r o f i l e ) 中,只提供对h t t p 协议的支持。而h t t p 协议是 一个无状态协议,它只有在客户端发送请求后,才会应答。而一个多人的网络游 戏系统,需要服务器端能够主动发送信息给客户端。为了解决这一矛盾,本文需 要解决的一个问题是对h t t p 协议进行扩充,通过扩充协议模拟在使用t c p 协议 中常见的服务器与客户端的主动交互。 2 、多人游戏中如何实现多个用户之间的同步。作为一个多人应用系统,用 户的同步是个关键的问题,必须保证两个以上的用户在游戏中的严格同步。 3 、在传统的计算机系统中,内存的容量是非常大的,因此在程序设计中限 制很少。而移动设备的内存容量极为有限,而且j a v a 作为跨平台的程序设计语 言鼓励使用堆的方式分配内存。本文中将使用多线程将栈式内存分配改为堆分 配。 4 、传统的程序设计中使用进程线程两个层次实现同步,而通过线程实现互 斥。j a v a 语言完全基于线程,本文使用多线程实现了同步和互斥。 5 、移动网络不够稳定。因此,在应用系统设计中,必须考虑到意外处理。 通过合理的意外处理机制,保证整个系统可以稳定、长期的运行。本系统中的意 外处理机制有如下几种,首先是同用户不能登录两次以上。二是服务器需要主 动将出问题的用户隔离,防止用户重复连接使数据库发生混乱。三是及时通知相 关的客户端,断开与发生问题的客户端的联系,并且将这些用户恢复到合理的状 态,以便这些用户继续游戏。 1 4 本文结构 本文总共分为六章。第一章介绍背景、设计目标和主要研究内容;第二章介 绍j 2 m e 平台和j 2 m e 开发中的常川的技术;第三章 双人交互系统的设计与实现; 第四章是多人游戏设计与实现;第五章通过运行实验来验证延迟、估算流量等参 数,为进一步的开发提供第一手数据;最后一章对设计进行总结,并且介绍了在 进一步的开发设计中可能使j f j 到的技术,为进一步的开发提供参考。 第二章j 2 m e 应用中的主要技术 2 1j 2 m e 概述 第二章j 2 m e 应用中的主要技术 j a v a 是一个程序设计语言体系,其中有分别针对企业的j 2 e e 版、针对基本 环境的j 2 s e 版和针对微型设备的j 2 m e 版。j 2 1 e 对应的微型设备中包含了p d a 、 移动设备等。将j 2 姬与移动设备结合,就可以实现跨越不同的硬件制造商的统 一的软件开发和运行环境。目前国内使用的移动设鍪主要是2 5 代g p r s 或者 c d m al x 网络手机。主要的生产商例如诺基亚、摩托罗拉等生产的手机,虽然操 作系统 3 、键盘等都不尽相同,但是都通过虚拟机或者j a v a 芯片,支持j a v a 软件的运行 4 。 2 1 1 配置 为了使大量不同的硬件设备可以运行j a v a 应用程序,需要为它们制定对应 的虚拟机和a p i 。这些a p i 和对应的虚拟机,统称为配置( c o n f i g u r a t i o n ) 。j a v a 中的虚拟机是与硬件紧密联系的,因此配置中的a p i 也是和硬件关系比较紧密的 那一部分。目前在j 2 m e 中提供两种配置:连接设备配置( c d c ,c o n n e c t e d d e v i c e c o n f i g u r a t i o n ) 和受限的连接设备配置( c l d c ,c o n n e c t e dl i m i t e dd e v i c e c o n f i g u r a t i o n ) 5 】 连接设备配置( c d c ) 主要针对性能较好的设备。c d c 采用内存优化虚拟机, 这就要求终端有较强的运算能力和较大的内存空间。这些设备包含机顶盒、个人 数字助理和智能通信设备。c d c 对应的虚拟帆称为c v m 。c d c 对硬件的基本要求 如下: 2 m 以上内存; 具有网络连接能力,通常为无线网络; 需要实现j a v a 虚拟机规范的全部功能; 3 2 位或者6 4 位的处理器。 受限的连接设备配置( c l d c ,c o n n e c t e dl i m i t e dd e v i c ec o n f i g u r a t i o n ) 主要针对那些更轻便、更经济的设备。这些设备性能较低,不能满足连接设备配 置的要求。它对应的虚拟机称为k v m 。相比之下,它只要求设备具有: 5 1 2 k b 以下内存; 有限能源供应( 例如电池) ; 有限或非持续网络连接; 4 第二章2 m e 应用中的主要技术 简单的用户界面; , 1 6 位或者3 2 位的处理器。 今天,我国移动网络中使用的手机绝大多数属于后面这一类。 2 1 2 简表( p r o f i i e ) 简表,是一系列关于软件a p i 的集合。它为应用程序提供接口,是编写应用 程序需要遵守的规则。通常包含输入方式、用户界面等。s u n 公司提供的简表针 对不同的配置也分为两类:基础简表( f o u n d a t i o np r o f i l e ) 针对c d c ,移动信 息设备简表( m i d p ,m o b i l ei n f o r m a t i o nd e v i c ep r o f i l e ) 针对c l d c 。 移动信息设备简表( m i d p ) 是目前在手机等移动终端使用的比较广泛的一个 简表。它对硬件的主要要求如下: 输出设备为最小屏幕尺寸9 6 x 5 4 像素的单色屏幕; 以单手键盘、双手键盘或者触摸屏为输入设备; 需要有1 2 8 k b 内存用于运行m i d p 组件,8 k b 存储用户生成的永久性数据, 3 2 k b 作为运行时环境。 移动信息设备简表( m i d p ) 中包含如下部分的a p i 集合: j a v a x m i c r o e d i t i o n 1 c d u i ,实现用户界面; j a v a x m i c r o e d i t i o n r m s ,实现信息永久存储; j a v a x m i c r o e d i t i o n m i d l e t ,定义应用和运行环境之间的交互; j a v a x m i c r o e d i t i o n i o ,提供基于c l d c 的网络支持。 2 1 3 移动信息设备小应用程序( m i d l e t ) 在移动信息设备简表( m i d p ) 基础上制作的j 2 m e 小应用程序,被称为移动 信息设备小应用程序( m i d l e t ,m o b i l ei n f o r m a t i o nd e v i c ea p p l e t ) 6 。在 m i d p i 0 标准中,针对网络只提供了h t t p 协议,而在m i d p 2 0 中提供了h t t p s 、 t c p u d p 等多种网络协议的支持。目前大部分手机只支持m i d p i 0 标准。选择支 持h t t p 协议的手机从最大的程度保证了设计的实崩性。 m i d l e t m i d p c l d c k v m 操作系统 图2 - 1j 2 m e 系统模型 5 第二章j 2 m e 应用中的主要技术 上面提到的这些概念之间的关系如图2 - 1 所示。显而易见,其中k v m 最接近 硬件,而m i d l e t 最接近用户。 2 2j 2 m e 开发中使用的主要技术 2 2 1m i d i e t 的技术细节 2 2 1 1 - i d l e t 的封装与运行 本设计采用移动信息设备小应用程序( m i d l e t ) 作为客户端软件。m i d l e t 是 为m i d p 编写的应用程序。在代码的形式上是被m i d p 定义的类 j a v a x m i c r o e d i t i o n m i d l e t m i d l e t 的子类。在编写一个m i d l e t 代码的时候, 需要注意如下的技术细节问题。 同传统的j a v a 应用程序区别的是,m i d l e t 通过封装的方式将静态的主 ( m a i n ) 方法封装在j a v a x m i c r o e d t i o n m i d l e t 包中 7 。编写的时候,只需要 通过扩展( e x t e n d s ) 来继承这个包提供的m i d l e t 类。 在g l o l e t 中,有三个固定的方法:s t a r t a p p 0 、p a u s e a p p 0 、 d e s t r o y a p p ( b o o l e a na r g o ) 表示应用程序启动、暂停( 例如游戏过程中来电) 、 停i e 8 。 2 2 2 1m i d i e t 中多个屏幕的实现 对于j 2 m e 程序设计,尤其是游戏程序设计,难免涉及到多个界面的转换。 具体就是在m i d l e t 中,可以包含多个屏幕( s c r e e n ) 对象,每个屏幕可以包含 各种用户界面。用户界面分为两类:高级用户界面和低级用户界面。高级用户界 面是系统规定外观的部件组成的,例如a l e r t 、f o r m 、l i s t 等对象。低级用户界 面就是图形方式用户界面,也就是各种c a n v a s 对象。除了生成用户界面外,各 个屏幕还可以继承c o m m a n d l i s t e n e r 类,从而接收用户命令。c a n v a s 类具有 k e y p r e s s e d 方法,可_ l j 于接收用户按键。为了实现多个屏幕切换,在m i d i e t 中 建立c a n v a s 对象时,将m i d l e t 本身传递给c a n v a s ,然后在c a n v a s 中使用m i d l e t 中的方法显示不同的c a n v a s 。 具体的代码如下: 在m i d l e t 类中建立对象: c a n v a s l = n e wc a n v a s l ( t h is ) :建立屏幕1 c a n v a s 2 = n e wc a n v a s 2 ( t h is ) :建立屏幕2 6 第二章j 2 1 v i e 应用中的主要技术 第一个c a n v a s 对象中: d i s p l a y = d i s p l a y g e t d i s p l a y ( t h i s ) ; d i s p l a y s e t c u r r e n t ( c a n v a s 2 ) :切换 第二个c a n v a s 对象中: d i s p l a y = d i s p l a y g e t d i s p l a y ( t h i s ) : d i s p l a y s e t c u r r e n t ( e a n v a s l ) :切换 2 2 2h t t p 协议 对于支持m d p i 0 的移动设备,对网络的访问只支持h t t p 协议。h t t p 作为 一个应用层协议,优点之一就是它的应用范围极为广泛,因此大多数网络即使使 用了防火墙,也要开放h t t p 的端口。 但是作为网络游戏协议,h t t p 协议的无连接性则是一个缺点。客户端没有 请求就不能获取任何信息。对于某些应用程序,这样做可以提高数据传输的效率。 但是,h t t p 协议的这一特性和网络游戏的设计有着矛盾。作为游戏的协议,要 求服务器能将信息主动的发送给客户端。为了解决这一问题,在几乎所有使用 h 1 v r p 协议的网络游戏中,都有一个循环。在这个循环中客户端不停的发送请求, 服务器收到请求后,将其它用户的动作、服务器的状态等信息发送给客户端。 在h t t p 协议中,规定了几种请求的类型。其中常用的有g e t 和p o s t 两种方 式 9 。g e t 方式的请求,每次请求将得到固定的内容,适合于网页的浏览。而 如果使用p o s t 方法,相同的请求每次可以得到不同的结果,这正好符合网络游 戏的设计。 下面列出了一次g e t 请求和一次p o s t 请求的详细内容。可以看到,p o s t 请 求的内容比较丰富,原因是p o s t 方法为了每次请求得到不同的结果,而将客户 端发送的信息写入请求。而g e t 方式全部的信息包含在u r l 中。 g e t h t t p 1 1 h o s t :h o s t u s e r a g e n t :m o z i l l a 5 0 ( w i n d o w s :u :w i n d o w s n t 5 0 :z h c n ;,r y :1 7 ) g e c k o 2 0 0 4 0 6 1 6 a c c e p t :t e x t x m l ,a p p l i c a t i o n x m l a p p l i c a t i o n x h t m l + x m l ,t e x t h t m l :q = o 9 ,t e x t p l a i n :q = o 8 ,i m a g e p n g 衫:q = o 5 a c c e p t l a n g u a g e :z h c n ,z h :q = o 5 a c c e p t e n c o d i n g :g z i p d e f l a t e k e e p - h l i r e :3 0 0 c o n n e c t i o n :k e e p a l i v e 第二章j 2 m e 应用中的主要技术 p o s t c g i _ b i n 1 0 9 i n ? t o k e n = 5 4 0 6 4 7 7 4 9 7 9 8 7 4 5 3 h t t p 1 1 h o s t :h o s l u s e r a g e n t :m o z i l l a 5 0 ( w i n d o w s :u :w i n d o w s n t 5 0 :z h 弋n :r v :1 7 ) g e c k o 2 0 0 4 0 6 1 6 a c c e p t :t e x t x m l ,a p p l i c a t i o n x m l ,a p p l i c a t i o n x h t m l + x m l ,t e x t h t m l :q = o 9 ,t e x t p l a i n :q - o 8 ,i m a g e p n g ,宰4 :q = o 5 。a c c e p t l a n g u a g e :z h c n ,z h :q = o 5 a c c e p t e n c o d i n g :g z i p ,d e f l a t e k e e p a 1 i r e :3 0 0 c o n n e c t i o n :k e e p - a l i r e r e f e r e r :u r l c o o k i e :u s e r = s k i n = c u r r e n t & q u o t a = 1 0 l e t t e r s = 5 0 0 e x p t i m e = o u s e r n a 脏- = b 4 d e d 1 d 2 & l 0 c k s t a t u s = 2 2 3 服务器s e r v i a t h t t p 协议对应的服务是嗍服务。w w 服务主要发送以超文本标示语言 ( h t m l ) 编写的网页到客户端,然后由客户端的浏览器解释,显示页面的内容。 上一小节提到,w w 服务器响应两种不同的h t t p 请求,其中p o s t 请求针对动态 的网页,也就是随着每次请求,用户会收到不同的页面。支持这种请求的技术也 非常多。例如c g i ,a s p ,以及本文要用到的s e r v l e t 技术。 s e r v l e t 归属于j 2 e e 范围内。s e r v l e t 使用j a v a 编写,因此它的可移植性 强。因为j a v a 是基于线程的,相对于传统的c g i 技术,s e r v l e t 更加节省内存, 效率也更高。更重要的是j a v a 是面向对象的程序设计语言,在编写服务器软件 的时候,可以脱离开面向用户连接的编写程序方式,变为面向对象的方式。佑统 的编程方式,需要了解一个用户连接期间能做些什么,然后针对客户行为分别编 码,最终形成一种串行的、面向过程的程序。而面向对象的程序设计,并不仅仅 是对象设计,更关键的是在软件内部建立起一种规则机制。软件中的每个部分虽 然各司其职,但是都遵循一定的规则。这种机制一般就是一个消息机制。在本应 用系统的设计中,服务器软件的设计更能体现这一点。在服务器软件中将游戏相 关的信息发送到处理游戏过程的对象,而将服务器需要处理的登录、注销等消息 直接处理。 在s e r v l e t 的设计中,包含着数据库接口的设计。在j a v a 中通过j d b c 提供 了对多种数据库软件的支持 1 0 。在网络应用软件的设计中,除了要处理即时的 通信,做出响应外,还需要使用数据库管理系统记录游戏状态、账号信息等。j d b c 是j a v a 中提供的针对标准s o l 数据库的接口 1 1 。在j d b c 中,将s q l 的操作做 了分层。第一个层次是针对物珲数据库的连接( c o n n e c t i o n ) ,这个对象需要以 同一资源定位符( u r l ) 的形式给出数据库的位置。第二个层次是语句 ( s t a t e m e n t ) ,用来发送查询的语句。查询的结果有两种,一种是执行了查询 ( s e l e c t ) 等语句后得到第三个层次的对象记录集( r e c o d e s e t ) :另一类是执行 了更新( u p d a t e ) 等语句后,则不会得到记录集对象 1 2 。需要注意的是,在以 s 第二章j 2 m e 应用中的主要技术 往的数据库软件设计中,需要注意及时关闭对象等问题,在s e r v l e t 中则不需要 太注意。在j a v a 程序设计语言中,给程序设计人员带来如此好处的原因是j a v a 的多线程机制:j d b c 接口是基于j a v a 的多线程机制的,因此当完成了查询后, 线程销毁的时候,系统回收对象。因此查询过程中产生的全部对象也都被自动清 除。 2 2 4 多线程的使用 程序设计中对多线程需求的出现,甚至比多任务操作系统的出现还要早。在 早期的b a c i s 语言程序设计中,设计者经常通过开关变量使同一段代码每次执行 路径各不相同。在今天,一个线程的定义就是进程中的一个执行路径。 本设计中多线程的使用有两个用途。第一,在游戏过程中,对图形用户接口 的操作做出快速响应。第二,在应用系统运行的同时,完成计时,由时间控制多 个客户端的同步。 9 第三章双人交替聊天系统的设计 第三章双人交替聊天系统的设计 3 1 移动设备程序设计的内存使用 本章结合一个客户1 1 1 务器应用程序的编写过程,详细的描述移动应用程序 设计的特点,为多人移动游戏系统的实现打基础。 3 1 1 内存分配方式的变化 程序运行时的内存分配方式分为三类:静态分配( s t a t i ca l l o c a t i o n ) 、自 动分配( a u t o m a t i ca 1 1 0 c a t i o n ) 和动态分配( d y n a m i ca 1 l o c a t i o n ) 。静态分 配主要用于静态变量和全局变量的分配。自动分配是在栈中为局部变量分配内存 的方法,栈中的内存可以随着代码块退出时的出栈操作被自动释放。动态分配是 在堆中动态分配内存空间的方式,是j 2 m e 小应用程序在运行的时候主要采取的 方式。 j a v a 中的一个重要机制就是垃圾收集,这是一种动态的内存清理方式。在 j a v a 中,垃圾收集器是一个专门的线程,它使用专门的算法来对内存进行清理。 本设计中,运行前内存分配中尽量使用节省内存的类型。例如在数值允许的 范围内使用s h o r t 类型代替i n t 。在运行时则通过使用多线程技术将递归转化为 循环来节省内存。 3 1 2 递归调用所带来问题的解决 递归调用是项传统技术。它使用数学归纳的方法简化复杂的问题,使程序 设计变得简单明了。然而,这一技术在用于移动应用程序设计时受到了限制,原 因如下: l 、递归调用需要占用大量的内存,而遵循受限连接设备配置( c l d c ) 的移 动设备内存有限。在面向对象程序设计语言中,递归调用的时候不仅需要在栈中 为寄存器、局部变量、形参等分配内存,而且为了实现某一方法而创建的对象实 例也占用大量的内存。 l o 第三章双人交替聊天系统的设计 图3 1 是在本设计过程中,某个类中使用递归调用的流程图。经过实验,如 果使用这种方式,移动终端的内存会在几次递归后耗尽。 图3 - 1 递归方式会创建大量的对象的实例 2 、k 使用动态方式分配内存,这与递归调用使用栈分配内存有着矛盾。 因此,在移动应用程序设计过程中,尽量不要使用递归。如果遇到递归,则 要将其转化为循环。在j a v a 中,多线程的使用为我们进行这样的转换提供了一 种手段。 下面结合设计中对关键类h t t p p o s t e r 进行改造的过程说明使用多线程将递 归转换为循环的具体方法。 3 1 2 1 改进h t t p p o s t e r 减少递归 改进这个类的主要思路就是减少递归的次数,试图在内存耗尽前完成一定的 发送接收操作。具体的处理方法是在接收响应之前使用新编写的g e t r e s p o n s e 方法来根据收到的响应判断是否进入递归,这样可以减少递归次数。 完成这个新类后,需要验证这个类的使用效果。因为诺基亚提供的 n o i k a 7 2 1 0 模拟器运行速度较快,同时具有显示内存使片j 状态的功能,这次实验 选用它作为测试的平台。这一软件模拟的设备中的总内存为2 1 5 0 4 0 字节。 第三章双人交替聊天系统的设计 图3 - 2 发送约1 0 0 个请求过程中内存的使用 图3 3 各类测试点的内存消耗比较 实验使用这个类发送1 0 0 0 个请求并且接收响应。结果在响应长度较小的情 况下,没有出现内存耗尽。响应内容长度较大的情况下,有可能耗尽内存。实验 中设立的四个内存剩余量测试点为:调用发送方法前、发送第一个字节前、接收 第。+ 个字节后和从发送方法返回。图3 - 2 中列举了前1 0 0 余个请求的处理过程中 的内存剩余量的变化。图3 - 3 更精确的列举了各种测试点之间的变化情况。从图 3 - 3 中可以看出:接收请求是这个过程中消耗内存量最大的部分。如果以图t 卢蔚 四个测试点构成的循环看,前面两步消耗的内存大约为l k 字节,而接收请求则 耗费了约i o k 字节的内存空问。就此可以得到结论:如果继续使用这种改进方式, 那么在接收请求之后进行垃圾收集可以起到很好的防止内存耗尽的作用。 第三章双人交替聊天系统的设计 3 1 2 2 改进h t t p p o s t e r 类中的多线程处理过程 1 1 改进h t t p p o s t e r 类中的多线程处理过程 上面的方法,虽然减少了递归次数,但是没有彻底消除递归。将h t t p p o s t e r 分成两种不同的执行路径,并且在类中实现循环,能消除递归。 具体的改造方式为通过开关变量将h t t p p o s t e r 分为主动的和被动的两种执 行方式。主动方式用于普通的请求响应,它按照原有的过程执行。被动的用于 轮询请求,它需要在主调类中执行判断后,如果收到满足要求的响应,则结束 h t t p p o s t e r 线程。图3 - 4 和3 - 5 描述了这两种不同的执行方式。 图3 - 4 主动的h t t p p o s t e r 执行过程图3 5 被动的h t t p p o s t e r 执行过程 3 1 2 3 在发送轮询请求的类中使用多线程 冈为需要发送轮询请求的类限制于单线程的处理方式,上面两种方法没有彻 底消除递归。在使用j a v a 语言进行程序设计的时候,可以使用多线程机制规定 的运行( r u n ) 方法来实现循环 1 3 。只要在发送轮询请求的类中建立一个新的 线程,用这个新线程来控制h t t p p o s t e r 线程,循环的发送请求,就可以实现轮 询。 图3 - 6 说明了经过改造的系统的运行过程。监视线程对发送轮询请求的线程 发出消息,发送轮询请求的线程启动其c 扣关于发送的部分。因为发送轮询请求的 线程中的运行方法中有循环,所以这个线程每次循环中都向执行具体操作的 第三章双人交替聊天系统的设计 h t t p p o s t e r 线程发送消息,h t t p p o s t e r 启动自身中发送请求的过程。 经过如此的改造,如果从需要发送轮询请求的线程以外观察,就会发现服务 器在一定时间内是“主动的”将信息发送给客户端的。而实际上这种主动发送是 通过线程中的轮询请求实现的。 图3 - 6 最终的h t t p p o s t c r 和相关线程的运行过程 3 2 客户端进程( s e s s i o n ) 的追踪方式 每个w e b 用户与w w w 服务器连接后形成自己的进程( s e s s i o n ) ,从安全性的 方面考虑,每个用户应该拥有唯一的进程。进程追踪的主要目的就是保证用户在 使用w e b 服务期间不被干扰。当用户进行一次连接后,服务器就生成个随机而 且唯一的编号来代替用户。正是这个随机且唯一的编号将不用的用户隔离于不同 的进程中。下面介绍两种不同的进程追踪方法。 方法一:c o o k i e 1 4 。这种方法通过在客户端保存小的文本文件来存储进程 信息,服务器根据客户端这些文件叶i 的内容来区分用户进程。 实验中,在m o z i1 1 a 浏览器中允许w e b 服务器1 2 7 0 0 1 在本地保存c o o k i e 后,访问这一服务器,然后打开浏览器的c o o k i e 管理器,可以看到如图3 7 所 示的情况:m o z i l l a 浏览器为服务器保留了一个c o o k i e 。从此以后,服务器可以 根据这一c o o k i e 区分客户端进程,直到这个c o o k i e 超过它的存活时问。 第三章双人交替聊天系统的设计 这种方式带来的问题是,此c o o k i e 不会随着浏览器关闭而失效,而是会在 服务器中设定的存活时间中持续有效。这样一个用户的进程就不会随着客户端软 件的关闭而立刻中断。 图3 - 7c o o k i e 方式的运行结果 方法二:重写( r e w r i t t e n ) u r l n 4 。这种方法在客户端第一次连接服务器 的时候,将用户的信息写入客户端发来的u r l 形成重写u r l ( r e w r i t t e nu r l ) , 然后将这一u r l 发回给客户端。客户端在以后的请求中都使j f f j 这个新的u r l 。服 务器通过u r l 中的字符串来区分客户端进程。 为了方便说明,这里以单一用户为例进行说明。首先加入代码: h t t p s e s s i o ns e s s = r e q u e s t g e t s e s s i o n ( t r u e ) : s e s s s e t a t t r i b u t e ( ”u s e r 。u s e r l ) : s t r i n gr e q u e s t u r l = r e q u e s t g e t r e q u e s t u r l ( ) t o s t r i n g o s t r i n gr e v r r i t t e n u r l = r e s p o n s e e n c o d e u r l ( r e q u e s t u r l ) : r e s p o n s e s e t h e a d e r ( ”x - r e w r i t t e n u r l 。r e v r r i t t e n u r ) : 为了客户端能自动使用这个重写u r l ,加入 o u t p r i n t i n ( ”& l o g i n o k & u s e r l 一) : o u t p r i n t l n ( ”) o u t p r

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论