admin管理员组

文章数量:1531237

2024年3月10日发(作者:)

棋牌网络游戏服务端的架构设计

【摘要】网络游戏目前在国内相当热门,棋牌类游戏在网络游

戏中占有比较重要的地位。越来越多的开发商加入到了网络游戏的

开发中来,但有关网络游戏开发技术介绍的资料却比较少。该文总

结了一款通用的棋牌类网络游戏服务端的架构设计,介绍了基本架

构、通信协议、多线程模型和第3方接口的相关内容,并对整个架

构作了一定分析。

【关键词】网络游戏 服务器 服务端架构 通信协议

棋牌类休闲游戏是网络游戏中非常重要的一类。从早期的联众

到现在的qq游戏,棋牌类休闲游戏得到了长足的发展。由于这类

游戏是将传统的民间游戏网络化,玩家很容易上手,因此这类游戏

成了受众群最大的网络游戏之一。作为研究开发人员,比较关心如

何去开发这样的游戏。然而,由于商业竞争的原因,目前网络上、

期刊上很难找到相关的技术文档。

一、设计

(一)i架构

一种通用的棋牌类网络游戏服务端的架构,主要分为5种软服

务器:登录服务器(1oginserver,ls),大厅服务器(hallserver,

hs),中央服务器(main server,ms),游戏 服务器(gameserver,

gs)和数据库服务器(db)。所谓“软服务器”是指逻辑意义上的

服务器,并不等于现实中的一台具体的物理服务器。一台物理服务

器上可以运行多个软服务器,一个软服务器也可能是由多台物理服

务器所组成。

hs也可以根据负载设置多个,负载均衡算法下面给出例子说明。

ms可以说是整个服务端的核心,它用于存储一些全局信息,如

厅中玩家信息、游戏服务器的信息等等。ms还负责一些合法性检验

和消息的转发等功能。为保证系统的安全性,整个过程中玩家不会

直接与ms进行连接和交互。

gs在客户端看来,就是提供游戏的一个房间。玩家在客户端点

击进入某个房间,就会与相应的gs建立连接,玩家离开gs时便与

之断开连接。

db用于存储玩家的游戏信息,包括账号信息和游戏中的数据等

等。为保证系统安全,玩家不会直接与db进行连接和交互。

(二)通信协议

我们没有采用现成的网络中间件,如dcom、corba等。一方面

是为了节约开发成本,另一方面这些网络中间件的诸多功能也用不

上。

根据需求设计了一套通信协议,称为星形分布式通信协议

(stardistributedcommunicationprotocol,sdcp)。由图1可以

看出,整个服务端(不包括db)的架构是一个星型结构,ms是中

心节点(centernode,cn),而其他服务器是叶节(leaf node,ln)。

这里没把db考虑在内,是因为一般db本身都会提供相应的通信功

能。实际上,sdcp仍然是一种c/s模式的通信协议,cn作为server,

而ln作为client。

为cn设计了一个centernetbase类,为ln设计了一个

leafnetbase类。

(三)多线程模型

以ms为例,ms的centernetbase包含两个缓冲队列,inqueue

和outqueue。inqueue用于存放接收到的消息,outqueue用于存放

待发送的消息。centernetbase中将启动两 个线程,接收线程和发

送线程。接收线程不停地将网络上接收到的消息存放到inqueue中,

而发送线程不停地将outqueue中的消息发送给相应接收者。ms还

将启动唯一的一个主线程,用于处理inqueue中的消息。在处理过

程中,当需要往外发送消息时,则将消息插入outqueue。

ls、gs和hs的多线程模型和ms有点不一样。这3种 服务器除

了含有类似于centernetbase的leafnetbase之外, 还有一个

servernetbase类用于处理和客户端的通信。同样, servernetba

‘se中也包含两个线程和两个队列。为了保证数据 同步处理的简

单,在主线程中仍然只启动唯一的一个线程, 只不过这时需要处

理两个inqueue中的消息。扩展一下,当 netbase类不止是两个时,

就得到了一个可复用的多线程模型。处理线程的片段代码如下:

二、小结

本文提出的服务端的系统架构,在一定程度上比较好地解决了

高效性、安全性、扩展性和通用性的问题。当然,本系统架构仍然

存在很多不完善的地方,希望与读者进行交流,能够提出更好的解

决方案来与大家分享,让网络游戏开发者都得到进一步的提高。

参考文献:

[1]苏羽,王媛媛.visualc++网络游戏建模与实现[m].科海电子

出版社,清华大学出北京:北京,2003,(08).

[2]李文正,郭巧,王利.intemet服务器负载均衡的研究与实现

[m].计算机工程,2005,(06).

本文标签: 网络游戏服务器游戏服务端