当前位置:文档之家› 休闲网络游戏平台框架设计与实现

休闲网络游戏平台框架设计与实现

休闲网络游戏平台框架设计与实现【摘要】休闲网络游戏以其轻松的游戏方式、多样的游戏特征,正逐步成为最时尚的网络娱乐形式.作为分布式软件系统重要应用之一,其设计过程中面临多种技术挑战,比如负载均衡、服务器端大量l/o通信的管理、平台构架的可扩展性等.本文采用了ace及框架、分层抽象、信号,槽机制等技术,完成了一个可扩展、易维护、可复用的休闲网络游戏平台框架.
【关键词】休闲游戏平台 ace 框架信号/槽机制
休闲网络游戏的通信传输过程随着因特网的普及,上网用户迅猛增加,选择网络游戏娱乐的人也越来越多.据cnnic统计分析,2008年中国国内上网用户:恪达到3.o5亿;网络游戏家数量接近4000万,其中,休闲游戏玩家将达3000万.
网络游戏的开发涉及广泛的软硬件技术,包括通信技术、程序设计、数学、人工智能、图形图像处理、cpu和gpu等.
一、休闲网络游戏通信技术
(一)休闲网络游戏的通信库的建立
通信库的建立主要是为了方便封装底层通信过程,使上层游戏逻辑能够透明地使用通信操作.通信库提供了收发数据包和从数据包叶1提取消息的功能.客户端和服务器端都将使用到这个通信库.在客户端,选择了使用简单方便的wsaasync.select i/o模型,首先要创建一个隐藏窗口,以便在 socket上有消息时能够接收.游戏协议在发送之前,上层游戏逻辑已经把协议数据打包成字节流.而
对游戏协议解包时,还需要知道协议的长度,所以,在实际发送之前需要把游戏协议的长度添加在这个字节流中.由于客户端和服务器端都要进行这个过程,把对字节流的再封包单独封装在一个类中,以增加复用.通信库为服务器端提供前摄器(ace proactor)模式的服务器处理器(ace—sen’ice—handler),完成异步的数据送收.
数据包结构cmsgwindow是一个隐藏的窗口,来处理socket端口上的消息;cwndserverlink负责实际的连接到服务器进行数据发送和接收.cwndsen’erlink中维护一个发送队列,在发送数据时,如发送队列中无数据就直接使用当前socket的send()函数发送,否则就表示发送循环还未结束,只需把数据加入到发送队列中即可.当收到数据时,由ctcplink解包分析,然后由cwndsen,erlink
进行消息处理.cwnd— sen?erlink主要给客户端使用.csen,icehandler是供服务器端使用的组件,用于处理大量的客户端连接.其继承自ctcplink,又继承自ace—sen’ice—handler,用于实现ctc-plink定义的一些功能.cservicehandler内部使用一个线程安全的消息队列send—msg—queue来缓存向客户端发送的数据.另外还使用了一个ace— message__block类型的接收缓冲区v—msg—block.ace—message—block类型可以存放任何类型任何长
度的消息,当然包括自己定义的消息.
二、休闲网络游戏平台设计与实现
游戏服务器是处理游戏逻辑的服务器程序,是几个服务器中比
较重要也比较复杂的一个.客户端通过和游戏服务器的交互,实现游戏过程.休闲网络游戏平台可以同时支持多个游戏,每个游戏以dll形式独立存在,由游戏服务器动态加载.
(一)服务器端设计
游戏服务器仅启动一个游戏逻辑程序,通过配置文件来决定要加载哪个dll.平台框架设置特定的接口,所有独立的游戏都继承这些接口,这样,新的游戏就可以不断添加到平台中来,以插件的形式发布.服务器程序结构的设计本着“对扩展开放,对修改关闭”的软件工程思想,利用成熟的设计模式,设计了如图2所示的主要结构和接口.
roomsenrice是服务器程序roomsen,er上的启动对象,它是负责运行各个休闲游戏的框架.room—sen’ice管理所有连接到roomsera,er上的用户,提供聊天,进入游戏,邀请,通信等功能.在roomsen’ice 初始化时,载人处理具体游戏逻辑的dll,以利用反射机制启动具体游戏逻辑.icommunieator接口由房间服务器实现,提供给具体游戏逻辑程序使用,用于端发消息等给客户端.消息的发送是通过房间服务器完成实际发送的.
ilog接el用于实现写日志文件.网络游戏平台是一个大的软件,为方便对平台的管理和维护,在服务器近行过程中把不断变化的运行状态和执行操作写入13志文件.平台是运行游戏的框架,支持在其上开发符合规范的游戏,ilog接13也为游戏开发和调试带来了极大的方便所有的游戏都继承igamemanager和igame接
口.room.sen,ice通过igamemanager接el创建游戏桌对象,在igamemanager接1:3中提供有creategame()函数,该函数返回一个igame类对象,也就是具体游戏的一个游戏桌.igame接口提供游戏逻辑功能,主要包括玩家逃跑,玩家掉线,掉线玩家重连,旁观者加入,旁观者离开,玩家使用道具,接收客户端消息等.房间服务器就是通过igame接口把消息通知给具体游戏逻辑处理程序的.
player类用于管理游戏玩家数据.不同的玩家用他的ip和会话号(sessionld)来标识.这个会话号是玩家在登陆时从游戏人口服务器中获得的.
(二)客户端设计及其关键代码实现
具体游戏窗口在玩家进人房间入座后启动,这时就由游戏框架窗口加载具体的游戏动态连接库(dynamic link library).登陆窗口的实现过程全面展示了在界面编程中信号/槽机制的应用.玩家运行游戏大厅时,首先出现登陆界面.登陆窗口中的服务器列表保存在本地配置文件中,在下载游戏客户端时从服务器端获得.历史玩家帐号保存在本地注册表中,保存数量定为10个.
在客户端应用程序启动时,需要首先准备网络连接,并建立连接对象.
具体游戏窗口的启动过程如下:
三、总结
本文虽已实现了一个休闲网络游戏平台的基本框架.但是,网
络游戏作为一个新兴产业,很多相关技术也在迅速发展中,这就需要不断地学习和发现新的技术和方法.而且,今后还需要进一步完善平台功能,如对mmorpg游戏的集成、对移动平台的支持及与ip1’v的结合等.
参考文献:
[1]douglas c.sch dt,stephen d.huston.c++网络编程卷2:运用ace和框架的系统化复用.北京:电子工业出版社,2004,(01).
[2]李虎雄.网络游戏数据平台数据通讯的实现方案[j].计算机工程与设计,2005(08).。

相关主题