首页 毕业设计(论文)-游戏数据库服务器设计

毕业设计(论文)-游戏数据库服务器设计

举报
开通vip

毕业设计(论文)-游戏数据库服务器设计毕业设计(论文)-游戏数据库服务器设计 重庆大学本科学生毕业设计(论文) 目录 目 录 摘 要 .......................................................................................................................................... I ABSTRACT .............................................................

毕业设计(论文)-游戏数据库服务器设计
毕业设计(论文)-游戏数据库服务器设计 重庆大学本科学生毕业设计(论文) 目录 目 录 摘 要 .......................................................................................................................................... I ABSTRACT ................................................................................................................................. II 1 绪 论 ...................................................................................................................................... 1 1.1 课 快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题 研究背景 ........................................................................................................................... 1 1.2 课题研究意义 ........................................................................................................................... 2 2 系统需求分析 ...................................................................................................................... 4 2.1 需求概述 ................................................................................................................................... 4 2.2 数据库系统需求 ....................................................................................................................... 4 2.3 用户用例分析 ........................................................................................................................... 5 3 系统设计 ................................................................................................................................. 8 3.1 MySQL概述 .............................................................................................................................. 8 3.2 数据库概念设计 ....................................................................................................................... 8 3.3 数据库逻辑设计 ..................................................................................................................... 14 4 系统难点技术分析与设计 .......................................................................................... 19 4.1 系统架构设计与分析 ............................................................................................................. 19 4.2 将MySQL C API封装成易于使用的数据库接口................................................................ 27 4.2.1 MySQL C API 概述 ................................................................................................ 27 4.2.2 封装C API ............................................................................................................. 29 5 系统实现 ............................................................................................................................... 33 6 工作总结和结论 ............................................................................................................... 36 致 谢 ........................................................................................................... 错误~未定义书签。37 参 考 文 献 ........................................................................................... 错误~未定义书签。38 II 重庆大学本科学生毕业设计(论文) 1 绪论 1 绪 论 1.1 课题研究背景 随着网络的普及,网络游戏已经成为大家耳濡目染的新生事物。网络游戏从出现到现在发展的时间很短,但是起发展速度却非常之快。现在,可以说网络游戏已经成为人们休闲、娱乐的有效方式。网络游戏必须依托于互联网进行、可以多人同时参与的游戏,通过人与人之间的互动达到交流、娱乐和休闲的目的。 一般的网络游戏都是采用客户/服务器模式的体系结构(见图1.1),包括客户机程序、服务器程序、数据库服务器。 游戏客户机游戏客户机游戏客户机 以太网 游戏客户机游戏客户机 防火墙防火墙 游戏服务器游戏服务器游戏服务器数据库服务器游戏服务器 图1.1 网络游戏体系结构 网络游戏都是采用如下的方式运行: ? 有一个或多个游戏服务器启动特定游戏服务。 ? 游戏者到游戏网站下载客户端程序并且申请游戏账号ID。然后启动客户端程序,通过网络协议连接游戏服务器。 ? 客户端程序负责处理客户端显示和操作界面,具有简单的逻辑处理功能,同时负责接收发送与服务器端交互的数据包。 ? 服务器程序负责处理服务器端逻辑、游戏逻辑、客户之间的网络信息传递,以及数据库之间的数据读取保存工作。同时服务器端还要承担客户端数据的接受 1 重庆大学本科学生毕业设计(论文) 1 绪论 转发工作。 ? 网络游戏常常用到网络协议有适用于Internet的TCP/IP协议、适用于局域网的IPX协议。 网络游戏程序的开发一般采用Microsoft Visual C++作为编译环境,分为客户端程序和服务器端程序。客户端程序主要负责显示用户界面,为用户提供赏心悦目的操作界面,通过客户端与服务器之间的网络传递数据,实现了多人协同游戏的目的。 在开发网络游戏时,首先要建立底层的网络通信类,利用网络通信类连接构建客户服务器之间的TCP/IP连接,然后在该连接的基础上利用自己设定的协议进行客户端登录、进入大厅、开始游戏、换房间等操作。在以上协议的基础上,同时在服务器端还需要和数据库服务器交互,用于读取或保存客户信息(如客户积分。密码。个人资料等数据)。在网络游戏中,数据库主要用来保存用户资料,包 [1]括用户注册信息、用户游戏资料以及其他设置资料。 本项目就是对网络游戏数据库系统的设计。网络游戏的服务器端在处理大量的客户资料时,必然要使用数据库进行大量数据的永久存储,所以在网络游戏的开发中数据库的设计也是很重要的环节。 1.2 课题研究意义 网络游戏的服务器端在处理大量的客户资料时,必然要使用数据库进行大量数据的存储和查询,服务器在数据库中保存客户注册信息、客户积分信息、客户设置信息等信息。同时因为游戏服务器一般采用多服务器,所以多台游戏服务器同时连接一台数据库服务器,进行客户数据的查询和修改,并且保持客户数据的同步。 在客户注册用户、登录服务器、保存游戏结果、退出游戏时游戏服务器都必须和数据库服务器进行交互,查询和保存客户资料;当同时有大量用户同时游戏时,所以必须保证数据库服务器的性能,以免造成数据库处理缓慢导致游戏服务器停止响应的后果。 现在的网络游戏,数据越来越多,越来越复杂。合理地组织这些数据,并为服务器提供便于操作的接口,从而实现快速的数据访问是一个非常重要的工作。数据库技术为开发人员提供了一个良好的平台。 至今,数据库设计的很多工作仍需要人工来做,除了关系型数据库已有一套较完整的数据范式理论可用来部分地指导数据库设计之外,尚缺乏一套完善的数据库设计理论、方法和工具,以实现数据库设计的自动化或交互式的半自动化设计。所以数据库设计今后的研究发展方向是研究数据库设计理论,寻求能够更有 2 重庆大学本科学生毕业设计(论文) 1 绪论 效地表达语义关系的数据模型,为各阶段的设计提供自动或半自动的设计工具和集成化的开发环境,使数据库的设计更加工程化、更加规范化和更加方便易行, [1]使得在数据库的设计中充分体现软件工程的先进思想和方法。 本项目使用的是基于MySQL创建的数据库,还使用了MySQL提供的一个C语言的API,使用该API的功能进行连接管理、实施查询、处理结果集等内容。为服务器提供操作数据库的 函数 excel方差函数excelsd函数已知函数     2 f x m x mx m      2 1 4 2拉格朗日函数pdf函数公式下载 接口。通过该课题的研究,能使我了解MySQL相关知识,加深对数据库相关知识的认识,掌握了网游服务器数据库的开发流程与方法。锻炼并提升自己的能力,丰富自己的专业知识。为以后就业打下良好基础。 3 重庆大学本科学生毕业设计(论文) 2 系统需求分析 2 系统需求分析 2.1 需求概述 在软件工程中,需求分析指的是在建立一个新的或改变一个现存的电脑系统时描写新系统的目的、范围和定义时所要做的所有的工作。需求分析是软件工程中的一个关键过程。在这个过程中,系统分析员和软件工程师确定顾客的需要。 只有在确定了这些需要后他们才能够分析和寻求新系统的解决方法。 需求分析主要是解决软件产品应该达到的各项功能和非功能要求,即用户要求做什么。软件需求分析工作是软件开发与用户紧密配合。充分交换意见,系统在广大的相关人群中谋取平衡与折衷,最终达到相互谅解的过程。 需求分析是从用户最初的非形式化需求到满足用户要求的软件产品的映射过程。它实际上是一个对用户意图不断进行揭示和判断的过程,其目的在于细化、精华软件的作用范围,确定拟开发软件的功能和性能、约束、环境。 需求分析工作是软件生存期中重要的一步,也是决定性的一步。软件需求分析工作是一个不断认识和逐步细化的过程。该过程将软件 计划 项目进度计划表范例计划下载计划下载计划下载课程教学计划下载 阶段所确定的软件范围(工作域)逐步细化到可详细定义的程度,并分析各种不同的软件元素,然 [4]后为这些元素找到可行的解决方法。 2.2 数据库系统需求 本阶段主要任务就是:调查和分析用户的业务活动和数据的使用情况,弄清所用数据的种类、范围、数量以及它们在业务活动中交流的情况,确定用户对数据库系统的使用要求和各种约束条件等,形成用户需求规约。 数据库系统主要完成登录服务器,大厅服务器,游戏服务器,数据库服务器与数据库之间的交互。其主要分为两大块:登录服务器与数据库的交互,大厅服务器与数据库的交互。 系统需求大致可叙述为: ? 用户通过游戏客户端软件登陆游戏服务器,服务器通过传递过来的用户、密码到数据库中验证,如果验证通过即可登录游戏,否则提示用户、密码错误。 ? 通过验证后,从数据库中读取出用户的个人资料如账号名,同时读取用户的游戏资料如积分、等级、金钱等参数。 ? 用户选择游戏大厅进行游戏。在大厅可进行查收礼物、购买物品、配置自己物品等操作。操作完成后,程序调用数据库接口保存用户相应信息。 ? 在用户一局游戏结束后,用户的游戏信息会改变。程序调用数据库接口保 4 重庆大学本科学生毕业设计(论文) 2 系统需求分析 存用户游戏信息,如胜率变化、积分等资料。 2.3 用户用例分析 在网络游戏中的用户用例根据功能分为3个包,分别为显示包、操作包、设置包。显示包主要包括客户端显示游戏界面的和现实图形等功能,以及显示游戏中的玩家信息的图标、游戏中的游戏大厅和显示游戏信息等。操作包主要是客户端的游戏操作,包括用户登录游戏、离开游戏、进入大厅、更换大厅等。设置包主要包括游戏者的设置信息以及其他功能。 下面列出了与数据库系统相关的用例。 ? 显示包: 包括以下用户用例:显示用户信息,显示大厅信息。(如图2.1) 显示用户信息显示大厅信息 用户 图2.1 显示包用户用例 显示包用户用例介绍如下: 1) 显示用户信息:显示在线用户状态,包括用户积分等各种数据,以及用户当前状态等。 2) 显示大厅信息:显示游戏大厅信息,包括人数等。同时可用于维护大厅信息。 ? 操作包: 包括以下用户用例:登录游戏、退出游戏、选择大厅、更换大厅、激活物品、丢弃物品、购买物品、赠送礼物、接收礼物、丢弃礼物。(如图2.2) 5 重庆大学本科学生毕业设计(论文) 2 系统需求分析 登录 选择大厅丢弃礼物 更换大厅接收礼物 激活物品赠送礼物用户 丢弃物品购买物品 退出 图2.2 操作包用户用例 操作包用户用例介绍如下: 1) 登录:用户启动登录器,输入账号、密码进行登录。如果通过验证即成功登陆,否则提示重新输入并验证。 2) 选择大厅:登录后,用户可以选择大厅进行游戏。进入大厅时验证账号、密码以及生成的验证码三项。如果通过验证即成功进入大厅,否则提示重新选择并验证。 3) 更换大厅:用户在大厅中可选择更换大厅。更换大厅时,重新产生验证码。并再次检验账号、密码、验证码三项。如果通过验证即成功更换大厅,否则提示重新操作并验证。 4) 激活物品:用户在查看物品界面可以激活自己未使用的物品。激活成功则提示激活成功,否则提示重新操作。 5) 丢弃物品:用户在查看物品界面可以丢弃自己的物品。成功即提示成功消息,否则提示重新操作。 6) 购买物品:用户在购买物品界面可以为自己购买物品。成功即提示成功消息,否则提示重新操作。 7) 赠送礼物:用户在礼物界面可将自己的物品赠送给他人。成功即提示成功消息,否则提示重新操作。 8) 接收礼物:用户在礼物界面可选择接收别人赠送的礼物。成功即提示成功消息,否则提示重新操作。 9) 丢弃礼物:用户在礼物界面可选择丢弃别人赠送的礼物。成功即提示成功 6 重庆大学本科学生毕业设计(论文) 2 系统需求分析 消息,否则提示重新操作。 10) 退出:用户退出游戏。之前产生的验证码会被删除。 7 重庆大学本科学生毕业设计(论文) 3 系统设计 3 系统设计 3.1 MySQL概述 MySQL是一个高性能、多线程、多用户、建立在客户-服务器结构上的RDBMS,专门为了速度和稳定性而设计。在过去的几年中,它已经成为线上和线下适合于数据库驱动的应用程序最受欢迎的RDBMS之一。现今,有超过400万的网站建立、使用并且配置了基于MySQL的应用程序,而且网站的数量每天都在增加。它得到了像Sony,Xerox,HP和NASA这样的公司或组织的积极使用。简而言之,它无处不在,它的应用将会变得更广泛。 我们不难发现这样急速增长的原因。相对于像Oracle和Microsoft SQL Server 一样的更商业化、非开放源代码的系统来说,快速、健壮和友好的数据库引擎、高级的数据管理和恢复工具、不断改进的特性合集、遵守现有的SQL 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 、友好的商业许可原则,都是促成MySQL成为可实施的选择因素。MySQL的较低总体拥有成本和更稳定、更安全的系统特性,使越来越多的企业吧它们的系统移植到MySQL,并且收获着MySQL开放源代码带来的效益。 MySQL始终围绕三个基本原则而设计,它们是:性能、可靠性和容易使用。严格按照这些准则产生了一个价格便宜而富有特色、适应标准而容易扩展、速度快而效率高的RDBMS,使MySQL成为开发者和管理者建立、维护和配置复杂应用程序的完美工具。 今天,MySQL的主要应用程序出现在网络舞台上,这并不令人吃惊。随着网站以及基于Web对分布式应用程序变得越来越复杂,有效管理数据来改善处理效率、降低响应时间和提高用户的全面技能就变得越来越重要了。因此,我们迫切需要一个速度快、性能稳定和安全的数据库(可以非常省心地配置和使用它,并且为将来的发展奠定坚实的基础)。 很多原因让MySQL正合需要。经过证实的记录让它的可靠性和寿命得到保证,开放源代码的根本能够确保迅速调整缺陷和性能持续增强大周期(更不必提及较低的总体拥有成本);对不同编程语言和技术的可移植性和支持,使它适合多 [2]种应用程序。 基于MySQL的以上优点,我们选择MySQL做为该网络游戏的数据库管理系统。 3.2 数据库概念设计 概念设计:对用户要求描述的现实世界(可能是一个工厂、一个商场或者一 8 重庆大学本科学生毕业设计(论文) 3 系统设计 个学校等),通过对其中住处的分类、聚集和概括,建立抽象的概念数据模型。这个概念模型应反映现实世界各部门的信息结构、信息流动情况、信息间的互相制约关系以及各部门对信息储存、查询和加工的要求等。所建立的模型应避开数据库在计算机上的具体实现细节,用一种抽象的形式表示出来。以扩充的实体—(E-R模型)联系模型方法为例,第一步先明确现实世界各部门所含的各种实体及其属性、实体间的联系以及对信息的制约条件等,从而给出各部门内所用信息的局部描述(在数据库中称为用户的局部视图)。第二步再将前面得到的多个用户 [6]的局部视 图集 钢筋混凝土灌注桩图集4号隔油池图集04s519砖砌隔油池图集城市道路护坡图集02s515排水检查井 成为一个全局视图,即用户要描述的现实世界的概念数据模型。 根据需求,我们可设计出如下的表: ? Account:存储用户账号信息(如图3.1)。用户注册账号时产生这些信息,每局游戏结束后将更新相应信息。用户可在游戏大厅中相应界面看到这些信息。 Account PKAccountId UserName Password Experience Money Level CurShipAccessId 图3.1 表Account属性 1) AccountId:用户账号id; 2) UserName:用户名字; 3) Password:用户密码; 4) Experience:用户经验; 5) Money:用户金钱; 6) Level:用户等级; 7) CurShipAccessId:用户当前战舰id。 ? Thing:存储用户道具信息(如图3.2)。用户买入、接收道具以及对道具进行各种操作时,这些数据将更新。用户可在游戏大厅中相应界面看到这些信息。 9 重庆大学本科学生毕业设计(论文) 3 系统设计 Thing PKThingId AccountId ThingType bBind bInstalled ActiveTime AccessId ShipAccessId EmplaceIndex 图3.2 表Thing属性 1) ThingId:用户物品id; 2) AccountId:用户物品所属用户id; 3) ThingType:用户物品类型; 4) bBind:用户物品是否绑定; 5) bInstalled:用户物品是否激活; 6) ActiveTime:用户物品有效时间; 7) AccessId:用户物品在本地角本数据库表中的id; 8) ShipAccessId:用户战舰在本地脚本数据库表中的id。 ? HSGCVerifyCode:临时存储用户登陆验证信息(如图3.3)。用户登录时 产生这些信息,用于用户进入、更换大厅时使用,用户退出游戏后,产生的这些 信息将被删除。 HSGCVerifyCode PKHSGCVerifyCodeId AccountId VerifyCode 图3.3 表HSGCVerifyCode属性 1) HSGCVerifyCodeId:登录验证Id; 2) AccountId:登录用户的Id; 3) VerifyCode:验证码。 ? Gift:存储用户礼物信息(如图3.4)。用户赠送礼物时,会产生相应信 息,被赠送用户会在相应界面看到这些信息。 10 重庆大学本科学生毕业设计(论文) 3 系统设计 Gift PKGiftId AccountId ThingType AccessId Benefactor DescText 图3.4 表Gift属性 1) GiftId:礼物的id; 2) AccountId:接收礼物用户的id; 3) ThingType:礼物类型; 4) Benefactor:送礼物的用户; 5) DescText:礼物附带的描述 以上表都是在游戏过程中与用户交互时生成的 此外,还有本地脚本数据库中的表(后缀为Access代表为本地数据库里的 表),但这些表不在设计范围中,故不做详述。它们包括: ? ShipAccess:存储游戏中战舰的信息(如图3.5)。 ShipAccess PKShipAccessId Type Goods ForwardV TurningV Vol EmplaceCount Hp DefCannon DefTorpedo 图3.5 表ShipAccess属性 ? RoleAccess:存储游戏中角色的信息(如图3.6)。 11 重庆大学本科学生毕业设计(论文) 3 系统设计 RoleAccess PKRoleAccessId Goods tonnage operate LoadBullet 图3.6 表RoleAccess属性 ? GunAccess:存储游戏中战舰上武器的信息(如图3.7)。 GunAccessPKGunAccessId Type Goods RotateSpeed PipeCount ShootGap ShootRange Power PowerRange TorpedoSpeed BulletSize 图3.7 表GunAccess属性 ? ItemAccess:存储游戏中物品的信息(如图3.8)。 ItemAccessPKItemAccessId Goods UseCount PlusMode TargetDiff1 TargetDiff2 TargetType Value ValueAccMode ValueContinueMode PlusTime RegionR 图3.8 表ItemAccess属性 12 重庆大学本科学生毕业设计(论文) 3 系统设计 ? EmplaceAccess:存储战舰位置信息(如图3.9)。 EmplaceAccess PKEmplaceAccessId Type ShipAccess EmplaceInde Place 图3.9 表EmplaceAccess属性 后缀为Access代表为本地数据库里的表 以上表的实体关系(如图3.10): 13 重庆大学本科学生毕业设计(论文) 3 系统设计 Account PKAccountId UserName Password Experience Money Level CurShipAccessId ThingHSGCVerifyCodeGift PKThingIdPKHSGCVerifyCodeIdPKGiftId AccountId AccountId AccountId ThingType VerifyCode ThingType bBind AccessId bInstalled Benefactor ActiveTime DescText AccessId ShipAccessId EmplaceIndex GunAccessShipAccessRoleAccessItemAccess PKGunAccessIdPKShipAccessIdPKRoleAccessIdPKItemAccessId Type Type Goods Goods Goods Goods tonnage UseCount RotateSpeed ForwardV operate PlusMode PipeCount TurningV LoadBullet TargetDiff1 ShootGap Vol TargetDiff2 ShootRange EmplaceCount TargetType Power Hp Value PowerRange DefCannon ValueAccMode TorpedoSpeed DefTorpedo ValueContinueModeEmplaceAccess BulletSize PlusTime RegionRPKEmplaceAccessId Type ShipAccess EmplaceInde Place 图3.10 实体关系图 3.3 数据库逻辑设计 逻辑设计:主要工作是将现实世界的概念数据模型设计成数据库的一种逻辑模式,即适应于某种特定数据库管理系统所支持的逻辑数据模式。与此同时,可 14 重庆大学本科学生毕业设计(论文) 3 系统设计 能还需为各种数据处理应用领域产生相应的逻辑子模式。这一步设计的结果就是 [6]所谓“逻辑数据库”。 在数据库概念设计完成之后,我们可进行数据库逻辑设计。 ? 创建数据库ocean。 在MySQL Command Line Client中执行如下命令: CREATE DATABASE ocean; 执行完毕后,数据库ocean创建成功。(如图3.11) 图3.11 数据库ocean ? 然后连接数据库ocean。 在MySQL Command Line Client中执行如下命令: USE ocean; 执行完毕后,提示数据库连接成功。 ? 在数据库ocean中创建表account。 在MySQL Command Line Client中执行如下命令: CREATE TABLE `account` ( `AccountId` int (10) unsigned NOT NULL auto_increment, `UserName` varchar (45) character set latin1 NOT NULL, `Password` varchar (45) character set latin1 NOT NULL, `Experience` int (10) unsigned NOT NULL, `Money` int (10) unsigned NOT NULL, `Level` int (10) unsigned NOT NULL, `CurShipAccessId` int (10) unsigned NOT NULL, PRIMARY KEY (`AccountId`) ) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8; 15 重庆大学本科学生毕业设计(论文) 3 系统设计 执行完毕后,表account创建成功。(如图3.12) 图3.12 表account ? 在数据库ocean中创建表gift。 在MySQL Command Line Client中执行如下命令: CREATE TABLE `gift` ( `GiftId` int (10) unsigned NOT NULL auto_increment, `AccountId` int (10) unsigned NOT NULL, `ThingType` int (10) unsigned NOT NULL, `AccessId` int (10) unsigned NOT NULL, `Benefator` varchar (45) NOT NULL, `DescText` varchar (45) NOT NULL, PRIMARY KEY (`GiftId`) ) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8; 执行完毕后,表gift创建成功。(如图3.13) 16 重庆大学本科学生毕业设计(论文) 3 系统设计 图3.13 表gift ? 在数据库ocean创建表hsgcverifycode。 在MySQL Command Line Client中执行如下命令: CREATE TABLE `hsgcverifycode` ( `HSGCVerifyCodeId` int (10) unsigned NOT NULL auto_increment, `AccountId` int (10) unsigned NOT NULL, `VerifyCode` int (10) unsigned NOT NULL, PRIMARY KEY (`HSGCVerifyCodeId`) ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=latin1; 执行完毕后,表hsgcverifycode创建成功。(如图3.14) 图3.14 表hsgcverifycode ? 创建表thing。 在MySQL Command Line Client中执行如下命令: 17 重庆大学本科学生毕业设计(论文) 3 系统设计 CREATE TABLE `thing` ( `ThingId` int (10) unsigned NOT NULL auto_increment, `AccountId` int (10) unsigned NOT NULL, `ThingType` int (10) unsigned NOT NULL, `bBind` int (10) unsigned NOT NULL, `bInstalled` int (10) unsigned NOT NULL, `ActiveTime` int (10) unsigned NOT NULL, `AccessId` int (10) unsigned NOT NULL, `ShipAccessId` int (10) unsigned NOT NULL, `EmplaceIndex` int (10) unsigned NOT NULL, PRIMARY KEY (`ThingId`) ) ENGINE=InnoDB AUTO_INCREMENT=67 DEFAULT CHARSET=latin1; 执行完毕后,表thing创建成功。(如图3.15) 图3.15 表thing 18 重庆大学本科学生毕业设计(论文) 4 系统难点技术分析与设计 4 系统难点技术分析与设计 4.1 系统架构设计与分析 根据分析,我们设计出系统架构图。(如图4.1) 登录 登录验证登录服务器 登陆器版本更新 数据库处理服务器 选择大厅 更换大厅 启数返房间维护动大厅服务器据回库结查询、操作操果作游戏游戏房间内游戏结开始调配束通知返房间回信息数据库结果 游戏逻辑交互游戏客户端游戏服务器 图4.1 系统架构图 从图我们可以看出系统各个部分的工作情况以及数据的交互情况。可从两个部分来分析: ? 登录服务器与数据库服务器的交互。其中包括: 用户由登录器客户端登陆登录服务器时,登录服务器请求数据库服务器执行登陆验证操作,数据库服务器再对数据库进行查询操作,并返回查询结果。 ? 大厅服务器与数据库服务器的交互。其中包括: 1) 用户由游戏客户端登陆大厅服务器时,大厅服务器请求数据库服务器执行登陆验证操作,数据库服务器再对数据库进行查询操作,并返回查询结果。 2) 用户更换大厅时,大厅服务器请求数据库服务器执行更换大厅操作,数据库服务器再对数据库进行相应操作,并返回操作后的结果。 3) 用户对物品进行查询、配置、激活、丢弃、购买、赠送、接收时,大厅服务器请求数据库服务器执行相应操作,数据库服务器在对数据局进行相应的操作,并返回操作后的结果。 19 重庆大学本科学生毕业设计(论文) 4 系统难点技术分析与设计 4) 一局游戏结束后,游戏服务器将游戏过程中各种信息的变化传给大厅服务器,大厅服务器请求数据库服务器执行数据更新操作,数据库服务器再对数据库进行更新操作,并返回更新后的结果。 5) 用户退出游戏时,大厅服务器请求数据库执行退出操作,数据库服务器再对数据库进行相应的删除数据操作。 其中值得注意到一点是:游戏服务器没有直接与数据库服务器进行交互,而是通过大厅服务器与数据库服务器进行数据的传递。之所以是这样,主要是因为这类网络对战游戏不需要在游戏过程中实时更新数据,可以通过大厅服务器,在一局游戏结束后,再进行游戏数据的更新。所以,本系统采用的是这种数据交换方式。 下面,我们结合系统需求,对架构图进行详细的分析: 表4.1 术语表 缩写 全写 定义 LC Login Client 登陆器客户端 LS Login Server 登录服务器 GC Game Client 游戏客户端 HS Hall Server 大厅服务器 DS DB Server 数据库处理服务器 GS Game Server 游戏服务器 DB Data Base 数据库 1) LC登陆LS时,LS请求DS进行验证,验证内容为用户名和密码2项。DS在DB中查询是否有匹配信息。如果验证成功,则数据库中产生一个HSGC验证码,并然后反馈验证结果。否则提示用户登陆失败。(如图4.2) 20 重庆大学本科学生毕业设计(论文) 4 系统难点技术分析与设计 失败 返回失败信息 LC 登录 LS成功 返回HSGC码 请求验证 (用户名和密码) DBDS查询验证 返回 查询结果 图4.2 LC登录LS流程图 2) GC登陆HS时,HS请求DS进行验证,验证内容为用户名和密码、HSGC 验证码 3项。DS在DB中查询是否有匹配信息。 然后反馈验证结果,如果是成 功的,那么附带用户信息,以及礼物信息。否则提示用户登录失败。(如图4.3) 失败 传回失败信息 GC 登录 HS成功 传回用户信息等 请求验证 (用户名,密码,HSGC码) DBDS查询验证 返回 查询结果 图4.3 GC登录HS流程图 3) GC已经在某个HS里,用户进行更换HS的操作时,HS请求DS进行更 换大厅操作,DS操作DB产生一个新HSGC验证码,然后返回新的HSGC验证 码给HS。并进行更换大厅操作。(如图4.4) 21 重庆大学本科学生毕业设计(论文) 4 系统难点技术分析与设计 GC 更换大厅 HS 返回更换大厅请求新HSGC码 DBDS操作 返回结果 图4.4用户更换大厅流程图 4) GC已经在某个HS里,用户进行配置时需要激活道具、装备和角色,HS请求DS进行激活操作。DS操作DB,更改DB中相应数据。操作完成后,传回更新后的数据给HS,并提示操作成功。(如图4.5) GC 激活操作 HS 返回激活请求操作结果 DBDS操作 返回 操作结果 图4.5 用户激活操作流程图 5) GC已经在某个HS里,用户点击丢弃按钮丢弃一个道具、装备或者角色,HS请求DS进行丢弃操作。DS对DB进行操作,更改DB中相应的数据。操作完成后,传回更新后的数据给HS,并提示操作成功。(如图4.6) 22 重庆大学本科学生毕业设计(论文) 4 系统难点技术分析与设计 GC 丢弃操作 HS 返回丢弃请求操作结果 DBDS操作 返回 操作结果 图4.6 用户丢弃物品操作流程图 6) GC已经在某个HS里,用户点击确定按钮确认当前的道具、装备或者角色在船上的配置,HS请求DS进行确认操作。DS对DB进行操作,更改DB中相应的数据。操作完成后,传回更新后的数据给HS,并提示操作成功。(如图4.7) GC 确认操作 HS 返回确认请求操作结果 DBDS操作 返回 操作结果 图4.7 用户确认物品操作流程图 7) GC已经在某个HS里,用户点击购买结算,HS请求DS进行结算操作。DS对DB进行操作,更改DB中相应的数据。操作完成后,传回更新后的数据给HS,并提示操作成功。(如图4.8) 23 重庆大学本科学生毕业设计(论文) 4 系统难点技术分析与设计 GC 购买操作 HS 返回购买请求操作结果 DBDS操作 返回 操作结果 图4.8 用户购买结算操作流程图 8) GC已经在某个HS里,用户要赠送礼物,HS请求DS进行赠送操作。DS对DB进行操作,更改DB中相应的数据。操作完成后,传回更新后的数据给HS,并提示操作成功。(如图4.9) GC 赠送操作 HS 返回赠送请求操作结果 DBDS操作 返回 操作结果 图4.9 用户赠送礼物操作流程图 9) GC已经在某个HS里,用户在收到礼物界面中,确认接收礼物时,HS请求DS进行接收操作。DS对DB进行操作,更改DB中相应的数据。操作完成后,传回更新后的数据给HS,并提示操作成功。(如图4.10) 24 重庆大学本科学生毕业设计(论文) 4 系统难点技术分析与设计 GC 接收操作 HS 返回接收请求操作结果 DBDS操作 返回 操作结果 图4.10 用户接收礼物操作流程图 10) GC已经在某个HS里,用户在收到礼物界面中,确定丢弃礼物是,HS请求DS进行丢弃礼物操作。DS对DB进行操作,更改DB中相应的数据。操作完成后,传回更新后的数据给HS,并提示操作成功。(如图4.11) GC 丢弃操作 HS 返回丢弃请求操作结果 DBDS操作 返回 操作结果 图4.11 用户丢弃礼物操作流程图 11) GC已经在某个HS里,用户查询礼物信息时,HS请求DS进行查询礼物信息操作。DS对DB进行查询,查询完成后,将查询到的数据返回给HS。(如图4.12) 25 重庆大学本科学生毕业设计(论文) 4 系统难点技术分析与设计 GC 查询操作 HS 返回查询请求操作结果 DBDS操作 返回 操作结果 图4.12 用户查询礼物操作流程图 12) 用户一局游戏结束后,用户的各种游戏信息会得到更新,GS将这些数据 传给HS,HS请求DS进行数据更新操作并将数据传给DS。DS对DB进行相应 的数据更新操作,操作完成后,将更新后的数据传回HS。(如图4.13) GS 游戏结束 更新数据 HS 返回更新数据请求操作结果 DBDS操作 返回 操作结果 图4.13 游戏结束后数据更新流程图 13) GC已经在某个HS里,用户退出游戏时,HS请求DS进行退出操作,DS 删除DB中相应的HSGC验证码信息。(如图4.14) GC 退出 HS 退出请求 删除DBDS相应验证码 图4.14 用户退出游戏操作流程图 26 重庆大学本科学生毕业设计(论文) 4 系统难点技术分析与设计 4.2 将MySQL C API封装成易于使用的数据库接口 4.2.1 MySQL C API 概述 与其他很多同类型的商业软件不同,MySQL通过一系列的API向开发者开放自己的内核,因此使他们能够自由地选择自己的语言创建数据库驱动的应用程序。MySQL API可以为开发者提供一些具体能力,下面分别简要予以介绍。 ? 链接管理:在一个应用程序能够与数据库交互并且对其中保存的数据进行查询之前,必须首先建立与数据库服务器的连接。MySQL API包含了专门针对应用程序连接到MySQL数据库服务器的一系列功能,可以提供各种申请证书,并且为以后的通信开放一个渠道。一旦所有通信完成,API还提供了一些功能来终止连接和释放被使用的内存,清除事件。 ? 实施查询和处理结果:一旦连接建立,应用程序可以向服务器发送查询,并检索结果。MySQL API提供了很多功能来简化这个过程,包括执行单个查询或者作为一个事务块的查询功能、检索和处理记录集合、收集来自集合的具体记录或来自记录的具体字段等。 ? 报告错误:MySQL API还提供了基本错误报告能力,当连接或查询出现问题时,能向调用者传递错误代码和信息。除此之外,API还允许调用者访问详细的排错和管理信息,包括当前服务器状态和所有活动过程列表等。 ? 辅助功能:除了前面介绍的各种功能外,MySQL API还可以提供很多所谓的管理功能,包括返回服务器的当前状态(打开连接的数量、得到处理的查询数量、服务器版本等);列出可以使用的数据库、表、字段和过程等;管理字符集;提供详细的诊断和排错信息;通过关闭不活动的连接和终止不活动的过程来清理没有使用的内存;关闭、重启或重载服务器等。 MySQL为很多不同的编程语言开放了API,使得可以使用自己选择的语言编写数据库驱动的应用程序。目前,MySQL提供的接口API编程语言有C,Java,PHP,Perl,Python,ODBC,Ruby,Eiffel和Tcl等,应确保在构建自己的MySQL应用程序时不会因缺少选择而造成问题。 因为MySQL是用C语言写成的,所以对MySQL来说,显然C语言的API是功能最全面的一种。C语言的API通过libmysqlclient库与MySQL发布捆绑在一起,并且可以 被MySQL附带的所有命令行工具使用。这些工具对于C开发者 [3]来说是理解API精髓的一个丰富的信息来源。 MySQL提供的C API由一组函数以及一组用于函数的数据类型组成,这些函数与MySQL 服务器进行通信并访问数据库,可以直接操控数据库,因而显著地提高了操控效能。 C API数据类型包括:MYSQL(数据库连接句柄)、MYSQL_RES(查询返 27 重庆大学本科学生毕业设计(论文) 4 系统难点技术分析与设计 回结果集)、MYSQL_ROW(行集)、MYSQL_FIELD(字段信息)、MYSQL_FIELD_OFFSET(字段表的偏移量)、my_ulonglong(自定义的无符号整型数)等; C API提供的函数包括:mysql_close()、mysql_connect()、mysql_query()、mysql_store_result()、mysql_init()等,其中mysql_query()最为重要,能完成绝大部分的数据库操控。 C API通过两个组件实现: ? 头文件:mysql.h,包含结构和功能说明。 ? Mysql库:libmysqlclient(Unix) 或 mysqlclient.lib(Windows),包括C的实际功能。 C API描述: ? 初始化MYSQL结构:mysql_init(&mysql); // mysql 类型为 MYSQL. ? 建立到服务器连接:mysql_real_connect(&mysql, “host”, “user”, “password”, “db1”, 0, NULL, 0); //采用默认值的三个参数分别为:连接MySQL服务器时使用的端口,连接MySQL服务器时使用的套接字,控制客户机行为使用的一个或多个可选标志。如果连接成功,将返回一个句柄,连接失败,将返回假。 ? 选择数据库:mysql_select_db(&mysql, “db_name”); ? 查询实施:mysql_query(&mysql, query_string); ? 对Select查询返回的结果集处理: 1) MYSQL_RES * result = mysql_store_result(&mysql); //将查询的结果保持到变量result。如果mysql_query()执行出错,用mysql_store_query()函数取结果集将返回NULL给result。如果客户机内存不大,可以每次检索一行记录:mysql_use_result()。 2) int numRows = mysql_num_rows(result); //检验结果集行数。 3) int numFields = mysql_num_fields(result); //检验结果集列数。 4) MYSQL_ROW row = mysql_fetch_row(result); //从结果集读取一行记录。 5) MYSQL_FIELD * field = mysql_fetch_field(result); //返回字段属性详细信息,如:字段名,类型,长度。 6) MYSQL_FIELD* fields=mysql_fetch_fields(result); //返回MYSQL_FIELD结构的数组,每个字段针对一个结果集合。 7) mysql_free_result(result); //使用完后,要释放结果集变量空间。 ? INSERT,UPDATE、DELETE等操作的结果处理: mysql_affected_rows(&mysql); //返回受影响的记录数。 28 重庆大学本科学生毕业设计(论文) 4 系统难点技术分析与设计 ? 涉及结果集处理的辅助函数: 1) MYSQL_ROW_OFFSET STDCALL mysql_row_seek(MYSQL_RES *result, MYSQL_ROW_OFFSET offset); //跳至该具体行。 2) MYSQL_FIELD_OFFSET STDCALL mysql_field_seek(MYSQL_RES *result, MYSQL_FIELD_OFFSET offset); //跳至该行具体列。 3) MYSQL_ROW_OFFSET STDCALL mysql_row_tell(MYSQL_RES *res); // 返回字段列表中字段游标当前位置。 4) MYSQL_FIELD_OFFSET STDCALL mysql_field_tell(MYSQL_RES *res); //返回结果集中行游标当前位置。 5) unsigned long * STDCALL mysql_fetch_lengths(MYSQL_RES *result); //当前行的字段值长度。 6) my_ulonglong STDCALL mysql_insert_id(MYSQL *mysql); //返回产生ATUO_INCREMENT字段的最后ID。 ? 错误处置: 1) unsigned int STDCALL mysql_errno(MYSQL *mysql); //错误号。 2) const char * STDCALL mysql_error(MYSQL *mysql); //错误信息。 [14]? 关闭连接:mysql_close (MYSQL* mysql); 4.2.2 封装C API 我们分别使用Database类(如图4.15)、DBInterface类(如图4.16)、Field类(如图4.17)、QueryResult类(如图4.18)、QueryResultMysql类(如图4.19)封装了MySQL数据库的功能,因此不具备通用性,只能在对MySQL的应用程序中使用。 ? Database类:主要负责初始化MySQL结构以及建立到服务器的连接。 Database #Database() +~Database() +bool Initialize() +QueryResult* Query() +QueryResult* PQuery() +bool Execute() +bool PExecute() 图4.15 Database类 ? DBInterface类:是Database类的子类,负责初始化MySQL结构以及建 29 重庆大学本科学生毕业设计(论文) 4 系统难点技术分析与设计 立到服务器的连接。 DBInterface -MYSQL *mMysql -std::vector mTokens +DBInterface() +~DBInterface() +bool Initialize() +QueryResult* PQuery()+QueryResult* Query()+bool Execute() +bool PExecute() +int Ping() 图4.16 DBInterface类 ? Field类:主要负责对数据库表中内容的操作。 Field -char *mValue -char *mName -enum DataTypes mType +Field() +~Field() +char *GetName() +enum DataTypes GetType() +char *GetString() +std::string GetCppString() +float GetFloat()() +bool GetBool() +unsigned char GetUInt() +void SetName() +void SetType() +void SetValue() 图4.17 Field类 ? QueryResult类:主要负责对查询结果的存储以及操作。 QueryResult -Field *mCurrentRow -unsigned long mFieldCount-unsigned long long mRowCount+QueryResult() +~QueryResult() +bool NextRow() +Field *Fetch() +unsigned long GetFieldCount()+unsigned long long GetRowCount() 图4.18 QueryResult类 ? QueryResultMysql类:是QueryResult类的子类,负责对查询结果的存储 30 重庆大学本科学生毕业设计(论文) 4 系统难点技术分析与设计 以及操作。 QueryResultMysql -enum Field::DataTypes ConvertNativeType -MYSQL_RES *mResult +QueryResultMysql() +~QueryResultMysql() +bool NextRow() +void EndQuery() 图4.19 QueryResultMysql类 通过这些类中定义的这些功能函数,我们可以通过远程或本机完成对MySQL 数据库的绝大部分操控,大大提高了效能。以上函数的具体功能都是通过调用C API函数实现的。 基于以上类,并结合系统各个部分的工作情况以及数据的交互情况。我们为 数据库服务器提供如下对应的函数来实现每个部分的功能。 ? 陆登录服务器请求数据库服务器验证登录。 void ClientLSRecvPacketProcess::Handle_DSLS_C_LoginVerify (WorldPacket& wp, unsigned long stub) ? 用户登录,大厅服务器请求数据库服务器验证登陆。 void ClientHSRecvPacketProcess::Handle_DSHS_C_QueryLogin (WorldPacket& wp, unsigned long stub) ? 用户选择大厅,大厅服务器请求数据库服务器保存游戏客户端选择大厅的 操作。 void ClientHSRecvPacketProcess::Handle_DSHS_C_SaveSelectHS (WorldPacket& wp, unsigned long stub) ? 用户退出程序,大厅服务器请求数据库服务器删除验证码。 void ClientHSRecvPacketProcess::Handle_DSHS_C_PlayerQuit (WorldPacket& wp, unsigned long stub) ? 游戏结束时,游戏服务器提交了用户信息变更数据给大厅服务器, 大厅服 务器请求数据库服务器进行数据更新。 void ClientHSRecvPacketProcess::Handle_DSHS_C_UpdatePlayerInfo (WorldPacket & wp, unsigned long stub) ? 用户进行配置时需要激活道具、装备和角色,大厅服务器请求数据库服务 器进行激活操作。 void ClientHSRecvPacketProcess::Handle_DSHS_C_UserActiveThing 31 重庆大学本科学生毕业设计(论文) 4 系统难点技术分析与设计 (WorldPacket& wp, unsigned long stub) ? 用户点击丢弃按钮丢弃一个道具、装备或者角色,大厅服务器请求数据库 服务器进行丢弃操作。 void ClientHSRecvPacketProcess::Handle_DSHS_C_UserDiscardThing (WorldPacket& wp, unsigned long stub) ? 用户点击确定按钮确认当前的道具、装备或者角色在船上的配置,大厅服 务器请求数据库服务器进行确认操作。 void ClientHSRecvPacketProcess::Handle_DSHS_C_UserConfigThing (WorldPacket& wp, unsigned long stub) ? 用户点击购买结算,大厅服务器请求数据库服务器进行结算操作。 void ClientHSRecvPacketProcess::Handle_DSHS_C_UserPay (WorldPacket& wp, unsigned long stub) ? 用户赠送礼物时,大厅服务器请求数据库服务器进行赠送操作。 void ClientHSRecvPacketProcess::Handle_DSHS_C_Present (WorldPacket& wp, unsigned long stub) ? 用户接收礼物时,大厅服务器请求数据库服务器进行收赠操作。 void ClientHSRecvPacketProcess::Handle_DSHS_C_ReceivePresent (WorldPacket& wp, unsigned long stub) ? 用户丢弃赠品时,大厅服务器请求数据库服务器进行丢弃赠品操作。 void ClientHSRecvPacketProcess::Handle_DSHS_C_DiscardPresent (WorldPacket& wp, unsigned long stub) ? 用户查询礼物时,大厅服务器请求数据库服务器进行赠品查询操作。 void ClientHSRecvPacketProcess::Handle_DSHS_C_RequirePresent (WorldPacket& wp, unsigned long stub) 32 重庆大学本科学生毕业设计(论文) 5 系统运行测试 5 系统运行测试 数据库系统建立后,界面视图如图5.1。 图5.1 数据库系统界面视图 现在,我们模拟用户的一些操作,然后观察数据库中的变化。以此来观察数据库系统是否能正常运行。 ? 用户Ronaldo和Mess登录,其账号、密码验证成功后,表hsgcverifycode 中产生登录验证码以及相应数据。(如图5.2) 图5.2 用户登录时,表hsgcverifycode中的变化 ? 用户Ronaldo更换大厅,其验证码更新。(如图5.3) 图5.3 用户更换大厅后,表hsgcverifycode中的变化 ? 用户Mess分别购买1号和2号物品,点击确认后,其金钱以及物品信息在对应表中发生变化。(如图5.4,5.5) 33 重庆大学本科学生毕业设计(论文) 5 系统运行测试 图5.4 用户购买物品后,其金钱数据更新 图5.5 用户购买物品后,其物品信息更新 ? 用户Mess将1号物品赠送给Ronaldo,表gift中发生变化。(如图5.6) 图5.6 用户赠送物品后,gift表中发生变化 ? 用户Ronaldo接收礼物,其物品信息发生变化。(如图5.7) 图5.7 用户接受礼物后,物品信息更新 ? 用户Mess和Ronaldo激活自己的物品,物品信息发生变化。(如图5.8) 图5.8 用户激活物品后,物品信息更新 ? 用户Mess丢弃自己的物品后,物品信息发生变化。(如图5.9) 图5.9 用户丢弃物品后,物品信息更新 ? 用户Mess退出游戏,表hsgcverifycode中其验证码被删除。(如图5.10) 34 重庆大学本科学生毕业设计(论文) 5 系统运行测试 图5.10 用户退出后,表hsgcverifycode发生变化 35 重庆大学本科学生毕业设计(论文) 6 工作总结 6 工作总结 首先,本文在深入理解分析系统需求的基础上,运用软件工程、模块化设计思想等进行了数据库概念设计、数据库逻辑设计、系统架构设计,对系统的核心技术进行了分析,解决了技术难点,并对系统的设计及实现提出了解决方案。 其次,本文通过系统架构图,并结合需求,分析出了系统各个部分的工作情况以及数据的交互情况。每个部分的功能通过数据库服务器调用对应函数来实现。 再次,本文还对MySQL C API进行了研究,并将C API封装成易于使用的数据库接口,提供给数据库服务器使用。 最后,利用封装后的MySQL C API,本文为数据库服务器提供了操作数据库的函数。 该数据库系统层次分明,结构清晰,有利于系统维护和将来的扩充升级。 实践证明,该系统很好满足了用户需求,提高了整个游戏的工作效率,得到了好评。 36
本文档为【毕业设计(论文)-游戏数据库服务器设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_977556
暂无简介~
格式:doc
大小:4MB
软件:Word
页数:47
分类:工学
上传时间:2018-01-15
浏览量:38