您的位置 首页 产品

网络棋牌游戏服务器具体架构阐明

网络棋牌游戏服务器详细架构说明-系统所选用的开发工具是优秀的MicrosoftVisualC++.net2003,系统是采用了客户端/服务器(C/S)编程模式,TCP/IP协议作为客户端与服务器的通信网络层,运用了具有性能最优的完成端口(IOCP:Input/OutputCompletionPort)网络开发模型以搭建服务器软件,客户端采用WinSocketAPI作为网络层。

一、物理架构阐明

游戏体系组件包含:

○ 服务器体系(中心服务器的操控体系,服务器登陆操控的体系,游戏登陆服务器,游戏房间操控的体系,游戏组件体系),游戏客户端(游戏大厅,游戏组件)。
○ 数据库体系:用于保存用户的信息数据、游戏积分数据、游戏体系运转状况的数据以及体系日志数据等数据。
○ 中心服务器的操控体系:用于向客户端供给大局装备及初始化数据运用。
○ 服务器登陆的操控体系:用于房间服务操控体系的登陆效验运用。
○ 游戏房间的操控体系:用于操控游戏房间的发动,中止,增加,删去,办理等等。
○ 游戏组件体系:用于具体游戏服务,被游戏房间操控体系挂接,供给游戏服务。
○ 游戏大厅:游戏玩家衔接游戏运用。

网络棋牌游戏服务器具体架构阐明

二、体系结构

体系所选用的开发工具是优异的MicrosoftVisualC++.net2003,体系是选用了客户端/服务器(C/S)编程方法,TCP/IP协议作为客户端与服务器的通讯网络层,运用了具有功用最优的完结端口(IOCP:Input/OutputCompletionPort)网络开发模型以树立服务器软件,客户端选用WinSocketAPI作为网络层。

体系选用了多服务器散布式的架构,由一个中心服务器CENTERSERVER和多个主服务器MainServer以及多个从服务器(LocalServer)一起作业以完结游戏逻辑和用户办理及通讯的功用。中心服务器向客户端供给大局装备,初始化数据(首要是定位一个主服务器IP地址),主服务器办理客户端用户身份验证、登录以及办理从服务器的树立,由多个从服务器办理游戏通讯,大厅及房间,从服务器可任意增加、删去、修正等。

体系首要发动中心服务器(CENTERSERVER),中心服务器从INI文件中读取MainServer列表信息,客户端供给大局装备,初始化数据,然后等候客户联合,客户联合后CENTERSERVER定位一个MainServer的IP地址和端口号,发往客户端,客户端收到后断开CENTERSERVER的联接,并立刻用MainServer的IP地址和端口号,和主服务器(MainServer)衔接.主服务器从数据库中读取从服务器的全部信息到主服务器的内存。首要读取ComType表以树立全部的游戏类型的基本信息,然后读取ServiceInfo(界面树结点信息表)以取得包含客户端界面结构、从服务器的信息、大厅和房间的全部信息。当有客户端恳求登录并成功和主服务器衔接的时分,主服务器将这全部的信息一次性发到客户端内存,客户端依据这些信息生成界面结构树。

主服务器发动后还能够在主服务器里创立多个从服务器及房间,创立完结后从服务器的IP地址及端口号就作为它的仅有标识被一起写进数据库和主服务器的内存;房间号、房间所属的游戏类型、所属的从服务器号也作为房间的仅有标识被一起写进数据库和主服务器的内存。

从服务器创立今后就在它所属的机器上发动。

客户端登录后首要和主服务器树立衔接(而且一直到客户端退出才断开)衔接成功后生成界面结构树(前述),当用户点击某个游戏房间的时分体系从内存中读出这个房间的全部信息(前述),依据房间所属从服务器的IP地址及端口号企图和这个从服务器树立衔接,衔接成功后相应的从服务器就将这个房间的全部信息发到这个客户端,客户端收到今后就依据这些信息生成房间。每逢有客户端的游戏方位产生改动的时分就向从服务器发送改动信息,从服务器保存、修正全部与它衔接的客户端的方位信息列表。

当一张桌子坐满时游戏开端。游戏开端后客户端也是和从服务器通讯以更新游戏信息。当客户端退出游戏后就回到大厅的这个房间,当退出大厅的时分首要和从服务器断开衔接,然后和主服务器断开衔接,最终中止整个客户端程序。

三、模块结构

体系包含三大首要模块结构:MainServer,LocalServer,Com.此外还有客户端装置,更新模块等。在三大首要模块结构中还有子DLL(动态链接库)模块。

1、MainServer(EXE项目):封装主服务器功用,包含办理客户端用户身份验证、登录以及办理从服务器的树立,数据库读写等。

2、LocalServer(EXE项目):封装从服务器功用,包含办理客户端游戏通讯,游戏逻辑,大厅及房间等。

3、Com(EXE项目):封装客户端全部功用,包含客户端登录,大厅及房间,客户端游戏通讯,游戏逻辑等。Com包含以下子模块:

客户端通用库PubLib(DLL模块)封装了客户端通用的调用接口,控件,类。供客户端全部的模块调用.

麻将游戏通用库MJLib(DLL模块)封装了客户端麻将游戏通用的调用接口类和十堰麻将类。通用的调用接口类供特别的麻将游戏模块调用。

扑克牌游戏通用库PisaLib(DLL模块)封装了客户端扑克牌游戏通用的调用接口类。通用的调用接口类供特别的扑克牌游戏模块调用。

大厅库RoomLib(DLL模块)封装了客户端大厅的调用接口。

象棋库XQLib(DLL模块)封装了客户端象棋的调用接口。

围棋库XQLib(DLL模块)封装了客户端围棋的调用接口。

军棋库XQLib(DLL模块)封装了客户端军棋的调用接口。

•   服务器架构暗示图:

网络棋牌游戏服务器具体架构阐明


  •   组件模块结构暗示图:

网络棋牌游戏服务器具体架构阐明


组件模块以中心数据办理模块为中心,数据库处理模块和SOCKET办理模块供给外部操作联络。以下是对每个模块的功用和接口的介绍:

1、中心数据办理模块承继于CBaseMainManage类,首要是和谐各个模块的联络,处理模块的逻辑处理,确保数据的完整性和合理性和合法性。中心数据办理类是单线程类,运用单线程的意图是为了使数据的处理避免了同步问题,数据的操作不需求运用临界变量确定数据,加快了处理速度,但前题条件是数据处理中,不能呈现长期的数据等候,确定操作存在。中心数据办理类完结了IServerSocketService网络数据处理接口和IDataBaseResultService数据库成果处理接口,供给了网络模块和数据库模块的进入接口,这两个接口是供网络模块和数据库模块调用(意思便是调用线程不是于中心办理模块的处于同一线程内,要注意数据同步问题)。数据办理模块关于这些接口调用的处理方法是先把投入的数据处理包分类,别离分为网络定时器数据包,网络读取数据包,网络衔接封闭数据包,数据库成果数据包,打包为数据办理类辨认的数据方法,投递到数据办理类的处理行列,等候数据办理类处理。傍边心数据办理类需求投递数据库操作的时分,就经过数据办理类的IDataBaseHandleService接口投递恳求(异步方法),当数据库处理完毕后,数据库办理模块会调用中心办理类的IDataBaseResultService数据库成果接口。

2、SOCKET办理模块CTCPSocketManage类,首要是完结了办理网络衔接资源,处理网络SOCET的读写操作,首要供给了单SOCKET发送函数,群发SOCKET函数,SOCKET封闭函数,供给SOCKET事情告诉。网络办理类是多线程处理类。单SOCKET发送函数是SendData函数,存在着多种重载完结,供给不同的数据发送恳求,群发SOCKET函数是SendDataBatch函数,封闭SOCKET函数是CloseSocket函数,存在着多种重载完结,当发送了网络音讯读取事情,此类首要是经过调用OnNetMessage虚拟函数,使用IServerSocketService接口把数据读取数据包投递到中心数据办理类。当网络封闭的时分,也经过IServerSocketService接口把数据读取数据包投递到中心数据办理类。(具体的完结见代码)

首要有的线程介绍:

○  staTIcunsigned__stdcallThreadAccept(LPVOIDpThreadData)(SOCKET衔接应对线程)
网络应对线程,等候外部衔接,激活一个闲暇的SOCKET目标,设置SOCKET参数,并把这新的SOCKET目标绑定到完结端口,然后投递缓冲区为零的数据读取操作调用,持续等候下一个外部衔接,具体的算法见代码。

○  staTIcunsigned__stdcallThreadRSSocket(LPVOIDpThreadData)(SOCKET数据接纳线程)
一个网络办理类供给了CUP*2+2个SOCKET音讯呼应线程,担任处理网络数据的发送,读取,封闭音讯处理,具体的算法见代码。

○  staTIcunsigned__stdcallThreadBatchSend(LPVOIDpThreadData)(SOCKET批量发送数据线程)
一个网络办理类供给了一个数据群发线程,担任处理数据的群发异步操作。此线程选用优化的行列方法处理群发数据,避免了行列的数据移动而带来的数据复制操作,加快了处理速度,具体的算法见代码。

○  staTIcunsigned__stdcallThreadKeepActive(LPVOIDpThreadData)(SOCKET保护线程)
一个网络办理类供给了一个SOCKET保护线程,担任保护断线或许超时的SOCKET目标,每个SOCKET目标主动被激活开端,服务器就会大约15秒向客户端发送一个检测数据包,客户端会在收到此检测数据包的时分立刻向服务器回来相同的检测数据包。在这前题条件下,保护线程就会大约15秒向全部的SOCKET目标都发送一个检测数据包,并封闭掉没有呼应的SOCKET目标,具体的算法见代码。

3、数据库办理模块,首要包含了数据库办理CAFCDataBaseManage类和数据库处理CDataBaseHandle类(承继于IDataBaseHandleService接口)。CAFCDataBaseManage只完结了数据的衔接、封闭操作和数据库操作恳求的投递使命,而实践的数据处理是依据不同的模块进行不同的数据库处理操作,经过CDataBaseHandle完结实践的数据操作。这样就避免了不同的数据库操作重复编写数据库的保护,衔接等代码。CAFCDataBaseManage在会发动一个DataServiceThread线程,等候数据库处理恳求操作数据包,交到类的成员变量CDataBaseHandle指针处理。

•   模块编写实践类散布:

每个游戏模块(承继于IModuleManageService接口),都包含了数据办理模块(承继于CBaseMainManage类)和数据库处理模块(承继于CDtaBaseHandle类),完结了模块的发动,中止,初始化,卸载功用,每个模块需求承继重写的部分便是数据库处理模块和数据办理模块。

数据办理模块包含了此组件的数据信息,逻辑处理,担任处理和发送网络数据包,更具需求投递数据库处理恳求,处理数据库处理成果。完结了网络数据包投递接口,数据库处理成果处理接口。

数据库处理模块包含了处理数据库恳求处理,发送数据库处理成果到数据办理模块处理。完结了依据恳求,完结适宜的数据库操作。

数据库办理类和网络办理类目标存在于CBaseMainManage类中,而实践的数据库操作类是个独立的类,存在于模块办理类中,在模块初始化的时分把此类的目标指针传递到数据库办理类,供数据库办理类调用。

•   游戏房间模块暗示阐明:
游戏房间模块是应用得最多模块之一,于其他模块最大的不同点的是中心数据办理类(承继于CbaseMainManage类的CComMainManage类)

数据办理类承继于根底数据办理类,还存在CComUserInfoManage用户办理类和CComDesk游戏桌子类目标数据。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/chanpin/93108.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部