事实上大部分的网络即时战略游戏和网络体育竞技游戏都最多支持16人同时在线。
在小型网络游戏中,所有玩家都运行同一个游戏客户端程序,
其中一个玩家(通常是计算机配置最好、网速最快的那位)将同时运行服务器端程序,这也是限制同时在线人数的主要原因。
大量的玩家将使服务器消耗大量的资源,同时运行服务器和客户端程序会很不现实。
下图展示了小型网络游戏大厅的设计框架:
当服务器启动游戏后,服务器在游戏大厅中调用接收(accept)函数。
这时其他玩家可以加入这个游戏,一旦人数满足游戏要求,服务器可以方便地停止接收状态,开始游戏。
其他玩家将不能再加入这个游戏,除非服务器又打开一个游戏大厅。
这种结构使得游戏服务器十分方便地加入游戏引擎。
服务器的运行流程如下:
(1)创建一个套接字,绑定IP和端口。
(2)服务器监听端口,等待连接。创建一个游戏大厅。
(3)服务器处于等待状态,因此需要两个进程/线程在服务器端运行:一个界面线程,处理游戏菜单操作;一个网络线程,等待连接。
(4)在每个客户端创建一个Socket,连接游戏服务器。
(5)服务器更新连接信息,并在游戏大厅上显示。同时,将连接用户信息发送给每个连接用户。
(6)当所有的用户都连接到服务器上开始游戏,关闭服务器侦听的套接字,中断所有等待的连接,新的用户将不可能连接上服务器。
采用上面描述的方法可以容易地设计出类似星际争霸的网络游戏架构。
游戏服务器只在开始的时候处理连接请求,后继的所有工作是数据的传送。
然而这种方法也存在着一些隐患,如某个客户端在游戏中断掉,它将无法连接上服务器。
因此,服务器必须通过一些测试方法(如长时间没有收到某个客户端的数据,或者是套接字关闭的通知)来探知是否有客户端掉线。
此时,服务器必须打开一个临时的接收套接字,等待掉线客户端的重新连接。
下面以一个回合制游戏的运行过程为例进行简单分析,如图所示。
在这个典型的回合制网络游戏中,客户端设计和实现主要包括以下内容:
游戏的基本功能——处理声音,动画等。
游戏通信——客户与服务器之间的网络传输细节。
游戏应用程序——程序线程管理、各种显示对话框、图形的处理与显示。
游戏处理——处理游戏逻辑、解析和处理游戏数据、游戏运行维护等。
而游戏的服务器端设计则主要包括:
游戏通信——负责游戏中客户服务器之间的网络传输细节。
游戏协议——对传递的数据进行打包和解包,并根据所包含的指令进行相应的操作。
游戏逻辑——负责处理游戏逻辑。
线程管理——线程的生成、结束和分配任务等。
服务器数据库的内容则包括:
角色表——角色ID、账号ID、角色的名称、属性和帮派等。
道具表——道具ID、所属角色ID、道具各类属性等。
帮派表——帮派ID、名称、帮派头目、介绍、总人数等。
邮件表——邮件ID、发件人角色ID、收件人角色ID、邮件内容等。
整个游戏的运营与管理包含以下机制:
客户端下载和安装。
会员注册。
web大厅管理。
客户端管理。
身份验证。
房间。
用户信息。
广告。
¥108.00
¥98.00
¥98.00
¥698.00