为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

网络游戏服务器端研究与设计

2011-02-15 2页 pdf 95KB 36阅读

用户头像

is_242146

暂无简介

举报
网络游戏服务器端研究与设计 作者简介:邓丽(1977-),女,辽宁沈阳人,硕士,大连东软信息学院讲师,研究方向为通信及数据库;董玮(1975-),女,陕西西安人,博士,大连东软信 息学院副教授,研究方向为网络多媒体应用。 网络游戏服务器端研究与设计 邓 丽,董 玮 (大连东软信息学院 计算机科学与技术系,辽宁 大连 116023) 摘 要:研究了网络游戏服务器端程序设计与实现,主要实现客户端 /服务器端模式(C/S)中的服务器端程序。 分析 了在实现程序设计中所需要解决的关键问题和通信协议,从而解决了服务器端程序的实现。 关键词:网络游戏;客户...
网络游戏服务器端研究与设计
作者简介:邓丽(1977-),女,辽宁沈阳人,硕士,大连东软信息学院讲师,研究方向为通信及数据库;董玮(1975-),女,陕西西安人,博士,大连东软信 息学院副教授,研究方向为网络多媒体应用。 网络游戏服务器端研究与设计 邓 丽,董 玮 (大连东软信息学院 计算机科学与技术系,辽宁 大连 116023) 摘 要:研究了网络游戏服务器端程序设计与实现,主要实现客户端 /服务器端模式(C/S)中的服务器端程序。 分析 了在实现程序设计中所需要解决的关键问和通信,从而解决了服务器端程序的实现。 关键词:网络游戏;客户/服务器;网络库;通信协议 中图分类号:TP311.52 文献标识码:A 文章编号:1672-7800(2009)05-0135-02 1 解决的关键问题 1.1 Epoll 网络服务器的瓶颈之一就是 IO的效率, 为了支持更多的 玩家同时在线, 网络库用到了 Linux2.6 内核中提供的 System Epoll 的解决。 传统的 select 以及 poll 的效率会因为在线 人数的线形递增而导致呈二次乃至三次方的下降,直接导致了 网络服务器可以支持的人数有了比较明显的限制。 自从 Linux 提供了/dev/epoll 的设备以及后来 2.6 内核中对 /dev/epoll 设备 的访问的封装(System Epoll)之后,大大的缓解这一现象。 1.2 I/O 完成端口 在 Windows平台下 IOCP是大型网络架构的首选。 微软在 Winsock2 中引入了 IOCP 这一概念。 IOCP 全称 I/O Completion Port,中文译为 I/O完成端口。IOCP是一个异步 I/O的 API,它可 以高效地将 I/O事件通知给应用程序。与使用 select()或是其它 异步方法不同的是,一个套接字(socket)与一个完成端口关联 了起来,然后就可继续进行正常的 Winsock操作了。 然而,当一 个事件发生的时候,此完成端口就将被操作系统加入一个队列 中。 然后应用程序可以对核心层进行查询以得到此完成端口。 1.3 公平调度 由于服务器有成千上万的客户,当在决定下一个处理什么 时,你不能简单地在所有客户中重复甄选。 在一个典型的游戏 中,每个客户向服务器提交新命令的速率和从服务器返回的响 应速率是成比例的。 假设每个响应要花 10 毫秒,那么当有 50 个客户时,响应时间的范围在 10~500 毫秒之间(假设所有的指 令同时发出)。相对于正常情况下玩家的决策时间,这是足够短 的。然而,当有 10000 个连接客户时,并且是用一个单线程按顺 序服务它的话,范围就会在 10~100000 毫秒之间,就算响时间 不到 1毫秒,该范围也仍在 1毫秒到几秒钟之间。 恰好在客户 和服务器之间额外的网络迟延,这个范围己足够宽得让一些客 户无法得到处理。 1.4 过载链式反应 一旦服务器过载,系统经常会遭受链式反应,会对游戏产 生灾难性后果。 当服务器严重负载时,每单元工作的处理时间 就会增加。 随着每个任务要花费更长的时间来处理,窗口出现 非确定行为的机会就开始增大, 以前没出现过的全新 BUG 也 会出现。最麻烦的是当系统负载不高的时候,这些 BUG一般不 会重复出现。 同时,可用资源(CPU,RAM 等)的减少降低了同一台服务 器上其他进程的吞吐量,因此它们也开始变得过载。 解决第一 个过程的过载可能只需要很短的时间,但该链式反应带来的副 作用可能会消耗系统大量的时间。这就是为什么需要谨慎额外 防护我们的系统,因此在“正常情况下”,服务器工作比正常要 求还要快些。这就保证了,当引起暂时过载的因素消失时,服务 器能迅速返回到较为轻松的负载状态。 1.5 处理过载 无论服务器的实现有多好,它都可能在某点开始过载。 最 重要的是在这种情况下决定做什么,然后记住用这个策略来编 写服务器的各种组件。 玩家的数量达到峰值,或者内部的迟延 造成请求/响应聚成一团,都可能导致服务器负载达到峰值。 最 差情况的设定是没有处理过载。 当过载发生,游戏会急剧下降 到一个无法玩的状态。 试图连接游戏的新玩家会发现游戏“中 止”。当客户事实上己经长时间等待服务器来处理时,他们会假 定它己经崩溃。 另外,每个坚持等待进入的玩家会造成游戏更 加慢。 前两步骤先是停止负载的进一步增加, 然后开始降低负 载。这除了提高服务器的性能外,使得过载也会很少发生。有些 服务器颠倒了这两步的次序,草率地断掉客户连接,这仅仅使 那些客户马上打算去重新连接而己。 软 件 导 刊 Software Guide 第8卷%第5期 2009年 5月 Vol.8 No.5 May. 2009 2009年软 件 导 刊 2009年软 件 导 刊 2009年软 件 导 刊 Research and Design of Network Game Server Programming Abstract:This thesis analyses the design and realization of network game server programming. It creates a huge space of the game for gamers and analyses import problems and communication protocols in programming, solve the problem of implementation of server pro- gramming. Key Words:Network Game; Client/Server;Network Library; Communication Protocolr 对于试图使用过载服务器的新客户,需要指定为最高优先 级。 目的是为了让它们尽可能快地离开,也避免他们很快地返 回。 最好发送一条特殊的消息。 使得客户在一段给定的时间内 拒绝重试。 这段放弃时间应该是随机产生的,否则当大量的客 户在同一时间全都试着重新连接时,以新形式表现的过载可能 会产生的,就会导致服务器在过载和过载之间振荡。 降低现有的负载可以通过游戏中决策(退出过分活跃的玩 家),或者是在提高吞吐量算法中用一个变量来完成。断开由那 些算法评估得到的 10%最不合意的客户,这一做法可以在极端 的情况下使用。 过载的服务器通常对谁都没有好处,在大多数 情况下,有部分玩家断线好过游戏一点也不能玩。 1.6 字符串匹配算法 主要研究玩家聊天信息的过滤,过滤技术的难点在于字符 串匹配算法。 在字符串匹配算法中分别研究了 BF算法、BM算 法和 ZZL算法。 2 系统架构 网络游戏服务器端的开发流程被划分为三个阶段: (1)网络库的开发,在操作系统提供的接口基础上封装自 己的网络库。 这是最为重要的一步,因为以后的逻辑实现的开 发都要在此基础上去扩展。 (2)通信协议的制定,定义客户端与服务器端,服务器端与 服务器端的通信规则。 (3)逻辑功能的实现,按照不同的功能需求开发相应的模 块,如:加入游戏,聊天,商城等。 2.1 客户/服务器编程模型 2.1.1 服务器端 (1)创建套接字,调用 Socket 函数创建一个待使用的套接 字。 通过这个函数的参数定义了套接字的类型、网络地址类型 和使用的协议。 (2)绑定套接字,使用 bind 函数绑定套接字,通过它将创 建好的套接字与本地地址和本地端口联系起来。 (3)监听套接字,使用 listen监听来自客户的连接请求。 (4)建立连接,通过调用 accept函数接受客户的连接请求。 (5) 网络通讯, 使用 send、sendto 等函数发送数据, 使用 recv、recvfrom 等函数接收数据。 (6)关闭套接字,在通讯结束后,使用 closeSocket 关闭不再 使用的套接字。 2.1.2 客户端 (1)创建套接字,调用 Socket函数创建套接字。 (2)建立连接,使用 connect 函数和服务器建立连接。 (3) 网络通迅, 使用 send、sendto 等函数发送数据, 使用 recv、recvfrom 等函数接收数据。 (4)关闭套接字,在通讯结束后,使用 closeSocket 关闭不再 使用的套接字。 2.2 重新封装的网络库 网络库分为两套:一套用于服务器与服务器之间的少量连 接(内网连接),采用最简洁朴素的阻塞 I/O 模型。 其特性是维 持一个稳定的长连接,提供大的数据吞吐量。 另一套用于服务 器与客户端之间的大量并发连接(外网连接),采用非阻塞 I/O 模型。 其特性是同时支持大量的连接,当连接堵塞到一定程度 时会断开连接。网络库的开发语言为 C++,只支持 TCP协议。因 为 TCP 传输控制协议,提供端到端的质量保证的数据传输,该 层负责数据的分组、质量控制和超时重发等,应用层可以忽略 保证数据传输可靠性的措施。 3 结束语 在进行网络游戏服务器端的程序开发时,我们需要先构建 最基础的网络库,这也是最重要的一部分,因为游戏服务器端 需要支持上万个同时在线的玩家,所以网络库性能的好坏将影 响到整个项目的成败。为了使网络库能够在 WINDOWS 平台与 LINUX 平台上运行,我们在 WINDOWS 平台上运用了 I/O 完成 端口技术,在 LINUX 平台上运用了 Epoll 技术,实现支持大量 的同时在线玩家。还有根据不同的情况去选择最适合网络游戏 服务器端开发的字符串匹配算法。 完成了网络库的开发后, 重点设计大厅服务器与客服端, 大厅服务器与游戏中心的通信协议。 在设计通信协议的时候, 考虑的重点在于如何能保证协议的可靠性,协议的设计也是为 了满足上层逻辑模块的功能实现。 参考文献: [1] PETE IAENSEE.游戏编程精粹 4[M].北京 :人民邮电出版社 , 2005. [2] ANDREW S.TANENBAUM,Maarten van Steen,分布式系统原理与 范型[M].北京:清华大学出版社,2004. (责任编辑:卓 光) 136· ·
/
本文档为【网络游戏服务器端研究与设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索