1、 一种架构是Peer-to-Peer 对等通信结构,如下图所示,即在多个玩家参与的游戏中,各玩家之间采用Peer-to-Peer的直接通信方式。在网络通信服务的形式上,一般采用浮动服务器的形式,即其中一个玩家的机器既是客户端,又扮演服务器的角色,一般由创建游戏局的玩家担任服务器(主机)。很多对战型的RTS网络游戏都采用这种结构。
2、 另一种架构是基于游戏大厅代理的结构,通过会话大厅(lobby)结构,为不同玩家牵线搭桥,既直接管理客户端,也管理游戏局,是回合制网络游戏的常见类型(不涉及)
3、 网络游戏的最典型的结构是C/S结构,如下图所示,特别适合于多人在线游戏,如RPG,成千上万人进行同一场游戏。服务器上有完整的游戏世界模型,玩家在客户端去观察这个世界,并与之互动。
C/S结 构的优点是能够充分发挥客户端计算机的处理能力,很多工作可以在客户端处理后再提交给服务器,使得客户端响应速度快。对于网络游戏来讲,这是十分关键的。 其缺点就是网络游戏的升级比较麻烦,每次升级需要客户端下载体积庞大的更新软件,然后进行安装,对于一些带宽并不是十分充足的用户而言,升级就成了游戏的 梦魇。不过,良好的客户端程序框架设计完全可以避免升级时下载庞大的更新软件。比如,客户端软件可以把场景定义文件独立出来,客户端程序在运行时动态加载 场景定义文件。这样,当网络游戏的设计者发现需要增加游戏场景时,他只需要更新一个场景定义文件就可以了,当然还需要一些必需的场景资源文件,如新增加的 图像、背景音效等。
一个典型的基于C/S架构的回合制游戏的运行流程如下图
一个支持8~16人的小型网络游戏的
一个支持8~16人的小型网络游戏的编写。事实上大部分的网络即时战略游戏和网络体育竞技游戏都最多支持16人同时在线。
在小型网络游戏中,所有玩家都运行同一个游戏客户端程序,其中一个玩家(通常是计算机配置最好、网速最快的那位)将同时运行服务器端程序,这也是限制同时在线人数的主要原因。大量的玩家将使服务器消耗大量的资源,同时运行服务器和客户端程序会很不现实。
图11-9展示了小型网络游戏大厅的设计框架。当服务器启动游戏后,服务器在游戏大厅中调用接收(accept)函数。这时其他玩家可以加入这个游戏,一旦人数满足游戏要求,服务器可以方便地停止接收状态,开始游戏。其他玩家将不能再加入这个游戏,除非服务器又打开一个游戏大厅。这种结构使得游戏服务器十分方便地加入游戏引擎。
图11-9 小型网络游戏的游戏大厅结构
服务器的运行流程如下:
(1)创建一个套接字,绑定IP和端口。
(2)服务器监听端口,等待连接。创建一个游戏大厅。
(3)服务器处于等待状态,因此需要两个进程/线程在服务器端运行:一个界面线程,处理游戏菜单操作;一个网络线程,等待连接。
(4)在每个客户端创建一个Socket,连接游戏服务器。
(5)服务器更新连接信息,并在游戏大厅上显示。同时,将连接用户信息发送给每个连接用户。
(6)当所有的用户都连接到服务器上开始游戏,关闭服务器侦听的套接字,中断所有等待的连接,新的用户将不可能连接上服务器。
采用上面描述的方法可以容易地设计出类似星际争霸的网络游戏架构,游戏服务器只在开始的时候处理连接请求,后继的所有工作是数据的传送。然而这种方法也存在着一些隐患,如某个客户端在游戏中断掉,它将无法连接上服务器。因此,服务器必须通过一些测试方法(如长时间没有收到某个客户端的数据,或者是套接字关闭的通知)来探知是否有客户端掉线。此时,服务器必须打开一个临时的接收套接字,等待掉线客户端的重新连接。
下面以一个回合制游戏的运行过程为例进行简单分析,如图11-10所示。
图11-10 小型网络游戏运行流程
在这个典型的回合制网络游戏中,客户端设计和实现主要包括以下内容:
¤ 游戏的基本功能——处理声音,动画等。
¤ 游戏框架——玩家信息,游戏界面,广告信息等。
¤ 游戏通信——客户与服务器之间的网络传输细节。
¤ 游戏应用程序——程序线程管理、各种显示对话框、图形的处理与显示。
¤ 游戏处理——处理游戏逻辑、解析和处理游戏数据、游戏运行维护等。
而游戏的服务器端设计则主要包括:
¤ 游戏通信——负责游戏中客户服务器之间的网络传输细节。
¤ 游戏协议——对传递的数据进行打包和解包,并根据所包含的指令进行相应的操作。
¤ 游戏逻辑——负责处理游戏逻辑。
¤ 线程管理——线程的生成、结束和分配任务等。
服务器数据库的内容则包括:
¤ 角色表——角色ID、账号ID、角色的名称、属性和帮派等。
¤ 道具表——道具ID、所属角色ID、道具各类属性等。
¤ 帮派表——帮派ID、名称、帮派头目、介绍、总人数等。
¤ 邮件表——邮件ID、发件人角色ID、收件人角色ID、邮件内容等。
整个游戏的运营与管理包含以下机制:
¤ 客户端下载和安装。
¤ 会员注册。
¤ WEB大厅管理。
¤ 客户端管理。
¤ 身份验证。
¤ 房间。
¤ 用户信息。
¤ 广告。