已阅读5页,还剩85页未读, 继续免费阅读
(计算机应用技术专业论文)linux下网游服务器的研究与实现.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
摘要 近年来,随着互联网技术的迅速发展,作为深受广大玩家喜爱的网络游戏 在这种背景下,也得到了很大的发展。网络游戏以其生动的画面,很好地模拟 了现实社会,是一种很受欢迎的娱乐的产品。很多的大型网游在线人数已达到 了百万,小型的网游在线人数在万人以上的更是数量巨大。国内已形成了较大 型的网游公司,如盛大,网易。有些互联网公司也在积极拓展网游业务。 如搜 狐,新浪,百度等。 网游服务器是网游的重要组成部分,用于处理前台发送的消息命令,随着用 户人数的增加,网游服务器的性能,稳定性,安全性交得越来越重要。本文就网 游服务器的技术,实现,做了详细的分析,研究。并设计与实现了了主要的网 游功能。 文章首先介绍了网游服务器的所使用的一些基本技术,包括c 语言,c + + 语 言,s t l ,多线程程序设计,设计模式,c + + 编程规范,u n i x i o 。高级轮循,网 络编程,w i n d o w s m f c 程序,加密算法,源代码漏洞查找。 第三章分析了服务器的各个层及其模块的总体设计文档,详细介绍了网游 服务器的通信层,消息层,应用层,业务层的设计,并用图形表示了各个模块 之间的关系,各个模块的功能,原理图。 第四章分析了服务器的消息层与业务层及其各个模块的详细设计文档,详 细说明了消息层,业务层中的各个模块的类的设计,及各类的主要操作的功能, 设计原理。并分析了各个类之间的关系。并对各个类的主要函数写了具体的流 程与步骤,为下一阶段的实现作好准备。 第五章设计了业务层的网络业务功能函数的实现。详细说明了消息层,业 务层中的各个模块的类的具体实现,并展示了其具体的代码及流程。并对关键 的代码作了注释。 第六章设计了服务器的通信层与消息层类的函数的测试文档。详细说明了 测试的过程及步骤,有对各个模块的单元测试,有对模块的功能测试,有对整 个系统的集成测试,有对系统的性能测试与安全性测试。 本文从网游服务器的总体设计,详细设计,实现,测试4 个方面全面地介 绍了l i n u x 下网游服务器的开发过程。实现网游服务器的过程中,考虑到数据的 安全性,采用了r c a 加密了传输数据,考虑到高效地处理数据,采用了线程池 的技术。本服务器完全采用c + + 的方式开发。在开发时,使用了s t l 以提高开 发效率。为了尽可能地重用,使用了设计模块的几种模块,使得整体结构清晰, 很容易得到重用。 关键字:服务器,网络编程,多线程,设计模式 a b s t r a c t i nr e c e n ty e a r s ,w i t ht h er a p i dd e v e l o p m e n to fi n t e r n e tt e c h n o l o g y ,a saf a v o r i t e e n t e r t a i n m e n tp r o d u c tb yt h em a j o r i t yo fo n l i n eg a m ep l a y e r s ,n e tg a m eh a sa l s oa g r e a td e v e l o p m e n t o n l i n eg a m ei m i t a t et h er e a l i z es o c i e t yb yi t sv i v i dp i c t u r e i ti sa v e r yp o p u l a re n t e r t a i n m e n tp r o d u c t t h el a r g en u m b e ro fo n l i n eg a m e s h a sr e a c h e d o n eh u n d r e dt h o u s a n d so fp l a y e r s ;as m a l ln u m b e ro fo n l i n eg a m e sh a v em o r et h a n o n em i l l i o np l a y e r s c h i n ah a sa l r e a d yl a r g e rn e t g a m ec o m p a n i e ss u c ha ss h e n d a , n e t e a s e s o m ei n t e r n e tc o m p a n i e sa l s oe x p a n dn e t w o r kb u s i n e s s ,s u c ha ss o h u ,s i n a , b a i d ua n ds oo n s e r v e ri sa l li m p o r t a n tc o m p o n e n to ft h en e t g a m e i td e a l sw i t ha l lt h em e s s a g e s w h i c ha x es e n tb yal a r g en u m b e ro fc l i e n t s n e tg a m es e r v e r sp e r f o r m a n c e ,s t a b i l i t y , s e c u r i t yi sb e c o m i n gi n c r e a s i n g l yi m p o r t a n t t h i sa r t i c l eh a sd o n ead e t a i l e da n a l y s i s a n dr e s e a r c hf o rt h es e r v e rt e c h n o l o g y ,r e a l i z a t i o n t h ea r t i c l ef i r s ti n t r o d u c e dt h eb a s i ct e c h n o l o g i e sf o rt h es e r v e r ,i n c l u d i n gc l a n g u a g e ,c + + l a n g u a g e ,s t l , m u l t i - t h r e a d e dp r o g r a m m i n g , d e s i g np a t t e r n s ,c + + p r o g r a m m i n gs p e c i f i c a t i o n ,u n i xi o ,h i g h l e v e lr o u n da p i ,n e t w o r kp r o g r a m m i n g , w i n d o w s m f cp r o c e d u r e s ,e n c r y p t i o na l g o r i t h m ,f m d i n gs o u r c ef l a w c h a p t e ri i ia n a l y z e ss e r v e r se a c hl a y e r sa n di t sm o d u l e sd e s i g nf i l e ,d e t a i l e d i n t r o d u c et h ec o m m u n i c a t i o n sl a y e r ,m e s s a g el a y e r ,a p p l i c a t i o nl a y e r , b u s i n e s sl a y e r s d e s i g n ,a n du s eg r a p h i c a lt od e m o s t r a t et h er e l a t i o n s h i pb e t w e e nt h ev a r i o u s m o d u l e s ,e a c hm o d u l e sf u n c t i o na n di td e s i g ns c h e m a t i c c h a p t e ri va n a l y z e st h em e s s a g el a y e r ,b u s i n e s sl a y e ra n di t sd e t a i l e dd e s i g nf i l e , d e t a i l e di n t r o d u c en e tg a m es e r v e r sm e s s a g el a y e r ,b u s i n e s sl a y e r sd e s i g nd e t a i l , o p e r a t i o no fv a r i o u sf u n c t i o n sa n dt h em a i nd e s i g np r i n c i p l e a n da n a l y z et h e r e l a t i o n s h i pb e t w e e nt h ev a r i o u sm o d u l e s sr e a l i z a t i o n ,f u n c t i o n c h a p t e rvd e s i g n st h ef u n c t i o no fb u s i n e s sl a y e ra n dt h er e a l i z a t i o no ft h e f u n c t i o n ,d e t a i l e di n t r o d u c em e s s a g el a y e r ,b u s i n e s sl a y e r sc o d ea n ds t e pf o re v e r y m o d u l e s a n dm a k es p e c i f i c a t i o nf o rt h ek e yc o d es e g m e n t i i i c h a p t e rv id e s i g n st h es e r v e rl a y e ra n dm e s s a g el a y e r st e s tf i l e ,a n dd e t a i l e d d e s c r i b et h et e s tp r o c e s sa n ds t e p f i r s t l y ,d ou n i tt e s tf o r t h es e r v e rl a y e ra n dm e s s a g e l a y e r ;s e c o n d l y ,d ot h ef u n c t i o nt e s t f o rt h eb u s m e 踌l a y e r sm o d u l e ,t h i r d l y ,d o s y s t e mi n t e g r a t e dt e s t ,l a s t l y ,d ot h es y s t e mp e r f o r m a n c et e s ta n ds e c u r i t yt e s t f r o mn e tg a m es e r v e r sg e n e r a ld e s i g n ,d e t a i l e dd e s i g n ,i m p l e m e n t a t i o n ,t e s t ,t h i s a r t i c l em a k eac o m p r e h e n s i v ei n t r o d u c t i o nt on e tg a m es e r v e r sd e v e l o p m e n tp r o c e s s u n d e rl i n u x a st ot h es e c u r i t yo fd a t ac o m m u n i c a t i o n ,t h i sa r t i c l eu s et h er c a a l g o r i t h mt oe n c r y p tt h ed a t a ;a st ot h ee f f i c i e n tp r o c e s so fd a t a ,t h i sa r t i c l eu s et h r e a d p o o lt e c h n o l o g y t h es e r v e rc o m p l e t e l yu s et h ec + + p a t t e r nt od e v e l o p i nt h e d e v e l o pp r o c e s s ,u s es t l t oe n h a n c ed e v e l o p m e n te f f i c i e n c y i no r d e rt or e u s ea s m u c ha sp o s s i b l e ,t h i sa r t i c l eu s et h ed e s i g np a t t e r nk n o w l e d g et or e a l i z es e v e r a l m o d u l e s t h i sm a k et h em o d u l ea n do v e r a l ls t r u c t u r ec a nb er e u s e de a s i l y k e y w o r d s :s e r v e r ,n e t w o r kp r o g r a m m i n g , m u l t i - t h r e a d e d ,d e s i g np a t t e m i v 独创性声明 本人声明,所呈交的论文是我个人在导师指导下进行的研究工作及取得的 研究成果。尽我所知,除了文中特别加以标注和致谢的地方外,论文中不包含 其他人已经发表或撰写过的研究成果,也不包含为获得武汉理工大学或其它教 育机构的学位或证书而使用过的材料。与我一同工作的同志对本研究所做的任 何贡献均己在论文中作了明确的说明并表示了谢意。 研究生( 基名) :j 童睦日期: 训夕户 学位论文使用授权书 本人完全了解武汉理工大学有关保留、使用学位论文的规定,即:学校有 权保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅 和借阅。本人授权武汉理工大学可以将本学位论文的全部内容编入有关数据库 进行检索,可以采用影印、缩印或其他复制手段保存或汇编本学位论文。同时 授权经武汉理工大学认可的国家有关机构或论文数据库使用或收录本学位论 文,并向社会公众提供信息服务。 ( 保密的论文在解密后应遵守此规定) 研究生( 签名) :缝 抓:监日期孚舢 武汉理工大学硕士学位论文 1 1 背景介绍 第1 章引言 从九十年代晚期以来,网游行业一直很繁荣。那时候,有很多人喜欢玩 即时网上对战游戏 ,这是由美国著名的暴雪公司开发:还有盛 大网络公司代理的游戏 ,这是由韩国公司开发。还有一些网络游戏 , , 。到了2 0 0 0 年后,网游发展得更 加迅速,大大小小网游公司相继成立。各式各样的游戏相继出现。比如网易 游戏,新浪,搜狐,等门户网站都成立了游戏部门。【1 】 网游的繁荣发展也迅速地促进了网游技术的发展。网游技术主要分为前 端技术与后台技术,前端主要是界面展示,后台主要是逻辑处理。前端将消 息传向后台,而后台将消息处理完后返回给前端。随着游戏程序的发展,后 台的程序与技术越来越复杂,性能越来越好,形成了我们现在的服务器技 术,网游的服务器我们称为“网游服务器”,或“网游服务器端”。 对于网游服务器的技术,国外的少数大型公司已有较为成熟的技术,特 别是美国的大型网游公司。韩国,日本的网游公司也有很好的技术积累。并 且利用这些技术将公司飞速向前发展,赚取了很多财富。 但国内互联网的服务器技术却落后很多,很多中小型公司由于人力,物 力的原因,只能研究小型稳定性差的网络服务器,有的公司真接使用国外做 好的服务器,只有几个大公司如腾讯,新浪,网易,有一些技术积累。 网游服务器的关键在于它的性能,稳定性,并发量。所有的服务器技术 研究主要是围绕这三个方面来进行的。而且它跟编程语言,操作系统有很大 的关系。一般来说,每次操作系统内核的升级,会给网游技术带来很大的机 会。一般来说,大部分网游服务器运行来u n i x 或者l i n u x 系统下,当l i n u x 从内核2 4 升级为2 6 时,它有新的特性,使得服务器技术得到了很大的发展。 另外,在编程语言里,当s t l 逐渐被很多的程序员所使用时,网络服务器的 很多代码改用s t l 进行编写,使得网游服务器的开发效率得到很大的提高, 程序的稳定性也得到很好的加强。1 2 l 以前的面向过程的c 语言服务器也改为 武汉理工大学硕士学位论文 匦向对象的c + + 开发,通用性与可维护性得到提高。还有,服务器的架构也 越来越多地使用了设计模式的知识,使得服务器的结构清楚,高效,内聚性 好。而且,因为网游服务器时刻都在与客户端通信,数据在网络上传输,安 全性非常重要,所以数据需要加密,但这仍然是不安全的,因为随着破解技 术的发展,只要足够的时间,加密都能被解开。所以网游的安全性工作一直 都要进行,以防数据泄漏。服务器技术仍然没有停止,随着各种新兴技术的 出现,网游服务器技术也将变得越来越复杂,而服务器的性能,稳定性,并 发性也会变得越来越好。 1 2 课题来源 本课题主要来源于在公司实习的实践及对一些网络服务器书籍的阅读。 在公司实习时,从事了公司网游服务器的开发与维护工作,主要是用c 语言 开发的。对l i n u x 下的c 语言程序设计,网络编程有了实践经验,对网络服 务器的结构,功能,流程有了一定的认识。后来又从事过用c + + 开发网络程 序。在开发时,运用了s t l ,多线程,设计模式的知识。学会了测试的相关 技术。慢慢地,对网络编程有了一定认识。在这期间,我阅读了一些网络程 序的书籍,丰富了我的编程知识,并且看了一些网游的开发书籍。对网游服 务器的认识也进了一步。在公司的实践中针对于l i n u x 下的c ,c + + 语言编程, 网络编程,多进程方面,这些都是服务器编程的重要部分,也打了一些基础, 然后再通过阅读一些较好的相关服务器编程的书籍,使知识更加完备了一些, 最后,研究了一些开源网站上的相关例子,使对网络服务器的程序的构架更 加清晰,在研究网游服务器的过程中,我研究了以前写过的网络程序的优缺 点,吸收好的部分,去掉不实用的技术。最后决定使用c + + 进行开发,保持 服务器的结构稳定,遵从编程规范,对代码进行单元与集成测试。 1 3 本人所做的工作 在网游服务器的设计与实现中主要做了代码移植,业务逻辑设计与实现, 协议设计,项目测试的工作。 1 借鉴了以前写过的一些程序中的代码,对其中的一些不需要的地方去 2 武汉理工大学硕士学位论文 掉,将不兼容的部分改写,使之符合网游服务器的要求。 2 设计了网络服务器的登录,走路,切换,聊天的业务流程,并用代码 实现了它的流程。 3 设计了它的协议部分。包括登录,走路,切换,聊天,进出场的协议。 4 写了测试文档,对服务器的类进行了单元测试,对模块进行了功能测 试。整个系统进行了集成测试。并写了测试工具,使用工具对服务器进行测 试。 1 4 论文结构 本论文分为六章,主要内容如下: 第一章:引言。简述了网络游戏行业的迅速发展带来了网游技术的快速 发展。介绍了几个大型的游戏公司与有较多玩家的网游产品,说明了本课题 产生的背景与课题来源,说明了我研究的思路与所作的工作,说明了论文各 个章节的主要内容。 第二章:网游服务器基本知识点。介绍了网络服务器在实现与设计时会 用到的知识点,设计思想,设计原理。 第三章:网游服务器的总体设计。介绍了网游服务器的总体结构,逻辑 结构,并以图示展示了网游服务器的模块,再分模块地介绍了各个模块的设 计原理,功能,组成。 第四章:详细设计。介绍了网游服务器的各模块设计时的类,函数,并 详细细介绍了各个函数的设计思路,功能,流程。 第五章:网游服务器的实现。逐个说明每个模块的代码实现,对模块的 类的函数,变量,功能,流程,主要代码进行了描述。 第六章:网游服务器的测试。对模块中的关键的类的函数进行单元测试 过程,对模块进行功能测试,对系统进行集成测试。 3 武汉理工大学硕士学位论文 第2 章网游服务器基本知识点 2 1c ,c + + ,s t l 2 1 1c 语言 c 语言是在7 0 年代初问世的。一九七八年由美国电话电报公司0 盯& t ) 贝 尔实验室正式发表了c 语言。同时由b w k e m i g h a n 和d m r i t c h i t 合著了著名 的“t h ecp r o g r a m m i n gl a n g u a g e ”一书。后来由美国国家标准协会 ( a m e r i c a nn a t i o n a ls t a n d a r d si n s t i t u t e ) 在此基础上制定了一个c 语言标准,于 一九八三年发表。通常称之为a n s ic 。1 1 1 早期的c 语言主要是用于u n i x 系统。由于c 语言的强大功能和各方面的 优点逐渐为人们认识,到了八十年代,c 开始进入其它操作系统,并很快在各类 大、中、小和微型计算机上得到了广泛的使用,成为当代最优秀的程序设计语 吉专一口o c 语言d e n n i sr i t c h i e 与k e nt h o m p s o n 开发的。对于底层开发,使用c 语 言是首选语言,它的重要特色是能直接对内存进行操作。与汇编语言相比。c 语 言编写的程序,可读性好,开发速度快,而且效率也较高。所以大部分底层开 发使用c 语言进行开发,操作系统的内核,驱动等也大部分是c 语言进行开发 的。我们熟悉的l i n u x 操作系统也是用c 语言开发的。对于网游服务器,因为大 部分是运行在l i n u x 或者u n i x 系统之上,并且对效率要求较高,所以也使用c 语言,有的地方不影响效率的情况下,才使用c + + 开发,以提高开发效率。【1 1 目前最流行的c 语言有以下几种: m i c r o s o f tc 或称m sc b o r l a n dt u r b oc 或称t u r b oc a t & tc 这些c 语言版本不仅实现了a n s ic 标准,而且在此基础上各自作了一些扩 充,使之更加方便、完美。 4 武汉理工大学硕士学位论文 2 1 2c + + c + + 是b j a m es t r o u s t r u p 在贝尔实验室开发的语言,c + + 在安全性及可移植 性上比c 语言要好。而且开发效率高,再配合s t l ,开发效率更高,现在很多 的应用开发都采用c + + 的方式。 c + + 语言包括过程性语言部分与类部分,即c + + 语言是面向过程和面向对象 的。面向对象程序设计的本质是把数据和处理数据的过程当成一个整体一对象。 c + + 充分支持面向对象程序设计。面向对象程序设计的实现需要封装和数据, 隐藏技术,继承和多态性技术。1 3 】 c + + 的三个主要特性是:封装和数据隐藏,继承和重用,多态性。 1 封装和数据隐藏 将数据连同函数绑在一起的能力可以用于创建新的数据类型。这通常被称 为数据封装。一个已存在的数据类型可能有几块数据封装在一起,例如f l o a t , 有一个指数,一个尾数和一个符号位。我们能够告诉它做事情:与另一个f l o a t 或i n t 相加,等等。它有属性和行为。比如一个类c t a s k ,这是我们创建一个新 的数据类型,可以a d d 0 ,f e t c h 0 和i n f l a t e o 。由说明c t a s k 创建一个c t a s k 就像 由说明f l o a tf 创建一个f l o a t 一样一个c t a s k 也有属性与行为,甚至它的活动就 像一个实数一一个内建的数据类型。称c t a s k 为抽象数据类型( a b s t r a c td a t at y p e ) 也许这是因为它能允许从问题空间抽象概念到解空间。另外,c + + 编译器把它看 做一个新的数据类型,如果说一个函数需要一个c t a s k 编,译器就确保传递了 一个c t a s k 。对抽象数据类型【有时称为用户定义类型( u s e r - d e f i n e dt y p e ) 的类型检 查就像对内建类型的类型检查一样严格。1 1 5 】 然而,我们会看到在对象上执行操作的方法有所不同。o b j e c t m e m b e r f u n c t i o n ( a r g l i s o 是对一个对象“调用一个成员函数”。而在面向对象的用法中, 也称之为“向一个对象发送消息”。 这样,对于c t a s k ,语句s a d d ( & i ) “发送消息 给s ”,也就是说,“将它与自己a d d o ”,事实上,面向对象编程可以总结为一句 话。“向对象发送消息”。实际上,需要做的所有事情就是创建一束对象并且给它 们发送消息。当然,技巧是勾画出对象和消息是什么,但如果完成了这样,用 c + + 的实现就直截了当了。 2 继承和重用 要制造新的电视机,可以有两种选择:一种是从草图开始,另一种是对现 5 武汉理工大学硕士学位论文 有的型号加以改进,也许现有的型号已经令人满意,但如果再加一个功能,会 更加完美。电视机工程师肯定不想从头开始,而是希望制造另一种新型电视机, 该机是在原有的型号基础上增加一组电路做成的。新的电视机很快就制造出来 了,被赋予一种新的型号,于是新型电视机就诞生了。这是继承和重用的实例。 c + + 采用继承支持重用的思想,程序可以在扩展现在类型的基础上声明新类型。 新子类是从现在类型派生出来的。称为派生类。新型电视机是原有型号的电视 机上增加若干种功能而得到的,所以新型电视机是原有电视机的派生,继承了 原有电视机的所有属性,并在此基础上增加了新的功能。【5 l 3 多态性 通过继承的方法构造类,采用多态性为每个类指定表现行为。例如,学生 类应该有一个计算成绩的操作。大学生继承了中学生,或者说是中学生的延伸。 对于中学生,计算成绩的操作表示语文,数学,英语等课程的计算,而对于后 继的大学生,计算成绩的操作表示高等数学,计算机,普通物理等课程的计算。 继承性和多态性的组合,可以轻易地生成一系列虽类似但独一无二的对象。由 于继承性,这些对象共享许多相似的特征。但由于多态性,一个对象可以有独 性的表现方式,而对另一个对象有另一种表现方式。 最后,对于c + + 程序,通常是通过同时连接一个或几个目标文件与一个或 几个库而创建的。库( 1 i b ) 是一组由机器指令构成的程序代码,是可连接文件。库 有标准库和用户生成的库。标准库是由c + + 提供的,用户生成的库是由软件开 发商或程序员提供的。文件与库连接的结果,即生成计算机可执行程序。 程序员首先在集成开发环境中编辑程序,或在其他编辑器中输入源程序, 然后,在集成环境中启动编绎程序将源程序转化成目标文件。编译之后,很有 可能产生一些编译错误,于是程序员回动编辑状态重新开始编辑程序和编译的 过程。同样在紧接着的连接中也会遇到连接错误,此时,又回动编辑状态修改 程序。1 1 l l 2 1 3s t l s t l ( s t a n d a r dt e m p l a t el i b r a r y ) 是c + + 里面重要的一部分。s t l 不仅是一个 可复用组件库,而且是一个包罗算法与数据结构的软件框架。它是用一行行精 细准确的源码,构造一个庞大,稳定,完整而可扩展的软件架构。s t l 在1 9 9 4 6 武汉理工大学硕士学位论文 年进入c + + 标准,现在s t l 被很多的程序员日常运用。 s t l 分为六大块,即容器,算法,迭代器,分配器,访函数,适配器。在 s t l 的使用中,容器通过a l l o c a t o r 取得数据储存空间。a l g o r i t h m 通过r e r a t o r 存取c o n t a i n e r 内容,f u n c t o r 可以协助a l g o r i t h m 完成不同的策略变化,a d a p t e r 可以修饰或直接套取f u n c t o r 。b 9 1 s t l 中主要的三部分是容器,算法,迭代器。容器与迭代器是以类的形式 提供,容器类包含很多数据结构及其上的操作。算法是一些常用的操作的集合, 包含排序,查找,拷贝,数学运算等。迭代器是s t l 的关键部分,它在容器与 算法之间起桥梁作用,类似于c 语言中的指针。但比指针复杂。 由于s t l 已成为c + + 标准程序库的一大脉系,因此,目前所有的c + + 编译 器一定支持一份s t l ,这份s t l 就在相应的各个c + + 头文件( h e a d e r s ) q a 。s t l 并非以二进制代码( b i n a r yc o d e ) 面貌出现,而是以源代码面貌供应。按c + + s t a n d a r d 的规定,所有标准头文件都不再有扩展名,但或许是为了向下兼容,或 许是为了内部组织规划,某些s t l 版本同时存在具扩展名和无扩展名的两份文 件,例如v i s u a lc + + 的d i n l m m w a r e 版本同时具备 和 ,某些s 1 几 版本只存在具扩展名的头文件,例如c + + b u i l d e r 的r a u g e w a v e 版本只有 。某些s t l 版本不仅有一线装配,还有二线装配,例如g n uc + + 的 s g i 版本不但有一线的 和 ,还有二线的 。 s t l 系由a l e x a n d e rs t e p a n o v 创造于1 9 7 9 年前后, 这也正是8 j a r n e s t r o u s t r u p 创造c + + 的年代。虽然d a v i c er m u s s e r 于1 9 7 1 年开始即在计算机几 何领域中发展并倡导某些泛型程序设计观念,但早期并没有任何程序语言支持 泛型编程,第一个支持泛型编概念的语言是a d a 。a l e x a n d e r 和m u s s e r 曾于1 9 8 7 年开发出一套相关的a d al i b r a r y 。然而a d a 在美国国防工业以外并未被广泛接 受,c + + 却如星火燎原般地在程序设计领域中攻城掠地。当时的c + + 尚未导入 t e m p l a t e 性质,a l e x a n d e r 却已经意识到,c + + 允许程序员通过指针以极佳弹性处 理内存,这一点正是既要求一般化( 泛型) 又不失效能的一个重要关键。瞄l 1 9 9 3 年9 月,a l e x a n d e rs t c p a n o v 和他一手创建的s t l ,与c + + 委员会有了 第一次接触。当时a l e x a n d e r 在硅谷给c + + 标准委员会作了一个演讲,讲题是t h e s c i e n c eo fc + + p r o g r a m m i n g 题目的理论性很强,但很受欢迎。1 9 9 4 年1 月6 日 a l e x a n d e r 收到a n d yk o c n i g ( c + + 标准委员会,当时的c + + s t a n d a r d 文件审核编辑) 来信,言明如果希望s t l 成为c + + 标准程序库的一部分。可于1 9 9 4 年1 月2 5 日 7 武汉理工大学硕士学位论文 前送交一份提案报告到委员会a l e x a n d e r 和l e e 于是拼命赶工完成了那份提案。 接着在1 9 9 4 年3 月份的圣地哥会议,s t l 在会议上获得了很好的回响。但 也有许多反对意见。但由于s t l 非常有潜力,所以投票结果压倒性地认为给这 个提案一次机会。 最后是滑铁卢会议,设票结果,8 0 赞成,2 0 反对,于是s t l 进入了c + + 标准化的正式流程,并终于成为1 9 9 8 年9 月定案的c + + 标准规格中的c + + 标准 库的一大脉系。影响所及,原本就有的c + + 程序库,如s t r e a m ,s t r i n g 等也都以 t e m p l a t e 重新写过。 2 2 多线程 在w i n d o w s 或者l i n u x u n i x 下,多线程都是一个重要的编程技术点。多线 程可以使程序并行地同时做多件事情。而不是按顺序地处理一件任务。在网游 服务器中更是这样。因为在同一个时刻,有很多的玩家在做各自的任务,所以 服务器必然要有同时响应各个玩家的能力,此时多线程成为可能。另外,多线 程也是提高效率的好方法,对于一些难以完成的任务,可以专门分给一个线程 来做,而其它的线程继续处理任务,不至于都在等待着前面的任务的完成。 p o s i x 线程包括线程创建和线程销毁,调度,强制互斥和条件等待的函数。 所有的这些都有相应的函数实现。多线程的重点与难点在各线程的同步上。线 程同步有三种方式。即互斥锁,条件变量与读写锁。 2 2 1 程序与进程 认识线程前,先要明白程序与进程。程序是为了完成特定的任务而准备好 的一个指令序列。要编写一个c 的源程序,程序员应创建一个包含c 语句的磁 盘文件,这些c 语句被组织成函数的形式。一个独立的c 源文件可能还包含变 量和函数的声明,类型和宏的定义,以及预处理器命令。源程序必须且只能包 含一个m a i n 函数。通常,c 的源文件扩展名为c ,头文件的扩展名为h 。头文件 通常只包括宏和类型的定义,定义的常量和函数声明。用预处理命令# i n c l u d e 可 以将头文件的内容插入源文件中。 c 编译器将每个源文件翻译成一个目标文件,然后编译器将这些单个的目标 8 武汉理工大学硕士学位论文 文件同必须的一些库链接,形成一个可执行模块( e x e c u t a b l em o d u l e ) 程序运行或 执行时,操作系统将可执行模块拷贝到主存储器的程序映像中去。 进程是一个正在执行的程序实例。每个实例都有自已的地址空间和执行状 态。操作系统将程序读入内存,为程序映像分配内存还不足以使之转换成进程。 进程必须有一个i d 号( 进程i d ) ,这样操作系统才能区分各个进程。进程状态指 的是单个进程的执行状态。操作系统记录进程i d 和相应的进程状态,并用这些 信息来分配和管理系统资源。操作系统还要对进程占用的内存和可分配的内存 进行管理。 t 6 1 当操作系统向内核结构中添加了适当的消息,并为运行程序代码分配了必 要的资源之后,程序就变成了进程。进程拥有地址空间( 它可以访问的内存) 和至 少一个被称为线程的控制流。进程的变量可以在进程的生命周期中始终存在( 静 态存储) ,也可以在执行进入一个程序块时自动分配,离开这个程序块时将其释 放( 自动存储) 进程以执行一个指令序列的控制流开始。处理器程序计数器记录处 理器要执行的下一条指令。c p u 读取一条指令后,对程序计数器的值进行增量运 算,并且在指令的执行过程中,比如,在出现分支的时候,还会对其做进一步 的修改。可能有多个进程驻存在内存中并发地执行,它们基本上都相到独立。 如果进程要进行通信或相到合作,它们就必须显式的通过文件系统,管道,共 享内存或网络这样的操作系统结构来进行交互。 2 2 2 线程和执行线程 程序执行时,由进程程序计数器的值来决定下面该执行哪一条进程指令。 得到的指令流被称为执行线程,它可以用程序代码执行期间为程序计数器指定 的指令地址序列来表示。 执行线程中的指令序列对进程来说就像是一条不问断的地址流。但从处理 器的观点来看,来自不同进程的执行线程是混在一起的。执行从一个进程切换 到另一个进程的点被称作上下文切换。 进程模型的自然扩展允许多个线程在同一个进程内执行。使用多个线程可 以避免上下文切换,并允许共享代码和数据。这种方法可能会改善有多个处理 器的机器中程序的性能。对共享数据进行操作的独立任务具有自然的并行性, 具有这种自然并行性的程序就可以利用这些多处理器机器额外的执行能力。操 9 武汉理工大学硕士学位论文 作系统具有重要的自然并行性,如果它拥有多个可以同时运行的执行线程,就 可以执行得更好。在对称多道处理技术中,操作系统和应用程序都有多个利用 了并行硬件的,不加区分的执行线程。1 4 】 线程是代表了进程内执行线程的一种抽象数据类型。线程有自已的执行栈, 程序计数器值,寄存器组和状态。通过在一个进程范围内声明多个线程,程序 员可以编写出以很低的开销获得并行性的程序。尽管这些线程提供了低开销的 并行性,但由于它们驻留在相同的进程地址空间并共享进程资源,因此,可能 还需要对它们进行额外的同步。由于启动进程所需的工作量大,有些入将进程 称作是重量级的。与之相反,线程有时被称作轻量级进程。 2 2 3 程序映像的布局 加载之后,可执行程序看起来占据了一个连续的内存块,这个连续的内存 块被称为程序映像。图2 - ! 显示的就是程序映像在它的逻辑地址空间中的一个布 局实例。程序映像有几个不同的分区。程序文本或代码显示在内存低端地址中。 在映像中已初始化和未初始化的静态变量也有自已的分区。其他的分区包括堆, 栈和环境。 高端地址 低端地址 命令行参数和环境变量 栈 丫 , 堆 未初始化的静态数据 广一一e 二二态数f l 程序文本 棚酗明弘环境 函数调用的活动记 录( 返回地址,参 致,已保存的寄存 器,自动变量) 用m 面l o c 函数族分 配的内存 图2 1 程序映像 活动记录是在进程栈端分配的一个内存块,用来装载调用过程中函数执行 上下文。每次函数调用都在栈上创建一个新的活动记录。假如嵌套的函数调用 l o 武汉理工大学硕士学位论文 按照后调用先返回的次序工作。那么,函数返回时会将活动记录从栈中删除。 活动记录包括返回地址,参数( 参数值从相应的命令行参数中拷贝而来) ,状态 信息和调用时某些c p u 寄存器值的拷贝。进程从记录表示的调用中返回时,要 恢复寄存器的值。活动记录中还包括函数执行时在其内部分配的自动变量。活 动记录的特定格式取决于硬件和编程语句。【2 j 除了静态变量和自动变量之外,程序映像中还包括了a r g c 和a r g v 占用的空 间以及m a l l o c 分配的空间。m a l l o c 函数族在一个被称为堆( h e a p ) 的空闲内存池中 分配存储空间。在堆上分配的存储空间一直存在,直到它被释放或程序退出为 止。如果一个函数调用了m a l l o c ,那么在这个函数返回之后,存储空间仍保持已 分配状态。除非程序有一个在函数返回之后仍然可以访问的,指向该存储空间 的指针,否则,返回后的程序就不能访问它。 2 3 设计模式 设计模式是设计思想的内容,因为现在的c + + 程序设计的项目中会大量使 用设计模式的知识,所以在网游设计中也会大量使用到。所以掌握一些设计模 式的知识是必须的。 设计模式由e r i c hg a m m a , r i c h a r dh e l m ,r a l p hj o h n s o n ,j o h nv l i s s i d e s 共同 提出。是由很多的项目的设计经验的总结而形成的。在他们著作的 这本书中,他们共提出了2 3 种设计模式,而这2 3 种设计模式分为三种类型。 分别为创建型模式,结构型模式,行为模式。 创建型模式抽象了实例化过程。它们帮助一个系统独立于如何创建,组合 和表示它的对象。一个类创建型模式使用继承改变被实例化的类,而一个对象 创建型模式将实例化委托给另一个对象。 结构型模式涉及到如何组合类和对象以获得更大的结构。结构型类模式采 用继承机制来组合接口或实现。一个简单的例子是采用多重继承方法将两个以 上的类组合在一个类,结果这个类包含了所有父类的性质。这一模式尤其有助 于多个独立开发的类库协同工作。另一个例子是类形式的适配器模式。一般来 说,适配器使得一个接口与其他接口兼容,从而给出了多个不同接口的统一抽 象。为此,类适配器对一个接口类进行私有继承。这样,适配器就可以用接口 类的接口表示它的接口。结构型对象模式不是对接口和实现进行组合,而是描 l l 武汉理工大学硕士学位论文 述了如何对一些对象进行组合,从而实现新功能的一些方法。因为可以在运行 时刻改变对象组合关系,所以对象组合关式具有更大的灵活性,而这种机制用 静态类组合是不可能实现的。1 1 6 j 行为模式涉及到算法和对象间职责的分配。行为模式不仅描述对象对象或 类的模式,还描述它们之间的通信模式。这些模式刻划了在运行时难以跟踪的 复杂的控制流。它们将你的注意力从控制流转移到对象间的联系方式上来。 2 3 1 设计模式的概念 软件行业中的设计模式与建筑行业的设计模式的概念是一样的。即:“每一 个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的 核心”。 一般而言,一个模式有四个基本要素: 1 模式名称一个助记名,它用一两个词来描述模式的问题,解决方案和 效果。命名一个新的模式增加了我们的设计词汇。设计模式允许我们在较高的 抽象层次上进行设计。基于一个模式词汇表,我们自已以及同事之间就可以讨 论模式并在编写文档时使用它们。模式名可以帮助我们思考,便于我们与其他 人交流设计思想及设计结果。 2 问题描述了应该在何时使用模式,它解释了设计问题和问题存在的前因 后果,它可能描述了特定的设计问题,如怎样用对象表示算法等。也可能描述 了导致不灵活设计的类或对象结构。有时候,问题部分会包括使用模式必须满 足的一系列先决条件。 3 解决方案描述了设计的组成成分,它们之间的相互关系及各自的职责和 协作方式。因为模式就像一个模板,可应用于多种不同场合,所以解决方案并 不描述一个特定而具体的设计或实现,而是提供设计问题的抽象描述和怎样用 一个具有一般意义的元素组合来解决这个问题。 4 效果描述了模式应用
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 药剂学就业方向
- 2026年吉林石化分公司春季高校毕业生招聘笔试参考题库及答案解析
- 2026江苏南京大学集成电路学院会计人员考试模拟试题及答案解析
- 2026年及未来5年市场数据中国孕妇护肤品行业市场全景分析及投资前景展望报告
- 2026年辽阳石化分公司春季高校毕业生招聘考试备考试题及答案解析
- 2026年及未来5年市场数据中国含钙奶制品行业市场发展数据监测及投资战略咨询报告
- 2026辽宁葫芦岛市渤海船舶职业学院赴高校面向研究生人员引进高层次人才招聘29人考试参考题库及答案解析
- 皮具制作工安全综合模拟考核试卷含答案
- 聚丁烯装置操作工安全检查知识考核试卷含答案
- 2026年河南省郑州市金水区事业单位联考招聘考试参考题库及答案解析
- 2026宁夏宁国运新能源盐池区域管理中心招聘14人备考题库参考答案详解
- 2026年钻探工程的法律法规指导
- 2026年城区中小学春秋假托管服务实施方案
- 企业内部审计与纪检监察融合的实践案例
- 第十九章 二次根式 数学活动 纸张规格的奥秘 教学设计 -2025-2026学年人教版数学八年级下册
- 储能合作框架协议范本
- 2026安徽交控集团所属安徽交控资源有限公司校园招聘3人备考题库及1套参考答案详解
- 住院诊疗规范管理制度
- 硅pu地面铺设施工工艺方案
- 2026年及未来5年市场数据中国氢氧化镁行业市场深度分析及投资战略数据分析研究报告
- 家电卖场员工劳动合同规定
评论
0/150
提交评论