MMOG Dir Server 概要设计.docx

上传人:b****4 文档编号:3537904 上传时间:2022-11-23 格式:DOCX 页数:9 大小:104.48KB
下载 相关 举报
MMOG Dir Server 概要设计.docx_第1页
第1页 / 共9页
MMOG Dir Server 概要设计.docx_第2页
第2页 / 共9页
MMOG Dir Server 概要设计.docx_第3页
第3页 / 共9页
MMOG Dir Server 概要设计.docx_第4页
第4页 / 共9页
MMOG Dir Server 概要设计.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

MMOG Dir Server 概要设计.docx

《MMOG Dir Server 概要设计.docx》由会员分享,可在线阅读,更多相关《MMOG Dir Server 概要设计.docx(9页珍藏版)》请在冰豆网上搜索。

MMOG Dir Server 概要设计.docx

MMOGDirServer概要设计

MMOGDirServer概要设计

 

拟制:

Willim

日期:

2004-09-07

审核:

日期:

 

深圳市腾讯计算机系统有限公司

版权所有不得复制

文档历史

修订日期

修订内容

协议版本

修订人

2004-9-07

created

V0.1.0

willim

目录

1简介5

1.1约定5

1.2玩家登陆的过程简介6

1.3目录服务器的功能需求6

2DirServer的结构7

2.1系统结构7

2.2内存中的ZoneServer组信息7

2.3DirServer的配置文件范例8

3消息接口定义及处理9

3.1在线人数上报9

3.2获取游戏区信息9

3.3选择游戏分区10

3.4消息流程11

4其它注意事项11

4.1zoneserver与地图的分布关系11

4.2GameClient保存最后登陆的ZoneServer信息12

MMOGDirServer概要设计

关键词:

Dirserver,目录服务器

摘要:

本文是MMOG目录服务器的概要设计,包含DirServer逻辑结构、与其它Server之间的接口消息描述。

缩略语清单:

DirServer目录服务器

IDC数据中心

1

简介

1.1约定

1、ZoneServer服务器组:

可以由1~N台ZoneServer服务器组成处理游戏的逻辑,每个ZoneServer负责若干地图,合起来是一个完整的游戏世界。

一个ZoneServer服务器组相当于《传奇》的一个分区或者《凯旋》的一条线(Line)。

2、WORLD:

在WORLDSERVER上保存了角色数据,它可以由多个ZoneServer服务器组组成,各服务器组的地图可以是相同的(类似于平衡世界),玩家的角色数据在各个ZoneServer组之间是共享的,也可以自由切换。

一个WORLD相当于一个游戏区。

3、CLUSTER:

在CLUSTERSERVER上保存了帐号数据,主要用于计费。

一个CLUSTER相当于一个游戏大区,可以由若干个WORLD组成,各WORLD之间的数据不共享。

视乎在线人数规模及不同IDC的合作需求,CLUSTER可以和WORLD数据存储在一起。

从运维成本和扩展方面考虑,一个IDC最好独立为一个游戏大区。

理想状态下在一个IDC所建立的《幻想》系统结构图:

1.2玩家登陆的过程简介

玩家启动GameClient应用后,连接到玩家所选择的某一DirServer,从该DirServer所提供的可用服务器组中选择一个将要进入的分区,由GameClient直接与某一具体的ZoneServer/ZoneConnect重新建立连接后,继续游戏。

1.3目录服务器的功能需求

1、显示各服务器组的忙闲程度

每隔N秒,各ZoneServer向DirServer上报其当时同时在线的人数信息,这相当于DirServer与ZoneServer之间的HeartBeat,若连续M次没收到上报的信息,则认为此ZoneServer不可用。

DirServer以ZoneServer组中某一最多在线人数的ZoneServer的情况作为整个组的忙闲程度,返回给GameClient。

2、提供玩家进入游戏世界的渠道

DirServer提供给玩家可用的游戏分区信息,进入游戏。

3、负荷分担

1)如果玩家只选择某一游戏区(WORLD)而没有选择(ZONESERVER组),DirServer将随机返回一个相对闲的ZoneServer的URL

2)DirServer将根据玩家所选择的ZoneServer组,从该组中选择一个繁忙程度最小的ZoneServer,返回给GameClient。

由Client自己进行判断,是继续联接上一次的ZoneServer,还是当前的ZoneServer。

2DirServer的结构

2.1系统结构

说明:

1、DirServer支持DNS域名访问,它和其它的GAMESERVER功能实体在同一个LAN内,使用BUS进行通信。

每一个IDC/游戏大区(CLUSTER)都至少有一个自己的DirServer

2、DirServer的信息保存在GameClient从本地的配置文件中

3、DBServer代表了WORLDSERVER和CLUSTERSERVER

2.2内存中的ZoneServer组信息

DirServer以SHM的方式保存本游戏大区中各ZoneServer的在线人数信息。

1、一个ZoneServer的信息结构

typedefstruct{

unsignedintiZoneSvrID;//ZoneSvrID:

x.x.x.x格式

intiMaxOnline;//可以达到的最大人数

intiCurrentOnline;//当前的人数

charszConnectUrl[64];//IP+PORT

time_tlLastActived;//最后一次上报信息的时间

}ZoneSvr;

2、ZoneServer组结构

#defineMAX_ZONE_SVR_IN_A_GRP8

typedefstruct{

shortnActiveZoneSvr;//当前组中可用的ZoneServer个数

charszGroupName[32];//ZoneServer组的名字

ZoneSvrastZoneSvrGroup[MAX_ZONE_SVR_IN_A_GRP];

}ZoneSvrGroup;

根据ZoneServerID中的第2个Byte,可以知道这个ZoneServer属于哪一组(请参见《MMOGSERVER功能实体编号》,下同)。

3、一个WORLD中所有的ZoneServer组

#defineMAX_ZONE_SVR_GRP16

typedefstruct{

shortnGrpNumber;

charszWorldName[32];//游戏区的名字

ZoneSvrGroupastZoneSvrGrp[MAX_ZONE_SVR_GRP];

}GameWorld;

根据ZoneServerID中的第1个Byte,可以知道这个ZoneServer属于哪一个WORLD。

4、一个CLUSTER中的所有WORLD

#defineMAX_WORLD16

typedefstruct{

shortnWorldNumber;

charszClusterName[32];//大区名字

GameWorldastGameWorld[MAX_WORLD];

}GameCluster;

2.3DirServer的配置文件范例

在ConfigServer开发完之前,DirServer中关于各ZoneServer的配置文件举例如下:

1、game_cluster.cfg

[World]

WorldID=1

WorldName=XXX

WorldConfig=world_1.cfg

[World]

WorldID=2

WorldName=YYY

WorldConfig=world_2.cfg

2、world_1.cfg

[ZoneSvrGroup]

ID=1

GroupName=XXX

[ZoneSvrGroup]

ID=2

GroupName=XXX

3消息接口定义及处理

DirServer与GameClient、ZoneServer之间的通信数据包结构沿用ZoneServer与GameClient之间的通信结构,由包头(含扩展包头)及包体组成,请参见《神剑CS协议》。

3.1在线人数上报

1、本消息由各ZoneServer发送给DirServer,无须应答

2、消息ID:

SS_ZONESVR_HEARTBEAT

消息体:

typedefstruct{

intiCurrentOnline;//当前的人数

intiMaxOnline;//可以达到的最大人数

charszConnectUrl[64];//本ZoneServer的连接IP和监听PORT

}ZoneSvrInfo;

ZoneServerID存储在BUS结构的iSrc字段。

3.2获取游戏区信息

1、请求:

由GameClient发送CS_CMD_GET_GAMEZONE消息

消息ID包含在包头中,无须消息体。

2、响应:

由DirServer返回CS_CMD_GET_GAMEZONE结果

消息体:

typedefstruct{

charcGrpId;

charszGrpName[32];

charcBusy;

}ZoneGroupList;

cBusy分为:

0优秀,1良好,2繁忙3非常繁忙

typedefstruct{

charcWorldId;

charszWorldName[32];

shortnGrpNumber;

ZoneGroupastZoneGrp[MAX_ZONE_SVR_GRP];

}WorldList;

typedefstruct{

shortnWorldNumber;

WorldListastWorld[MAX_WORLD];

}ClusterInfo;

返回消息:

typedefstruct{

charcResult;

union{

ClusterInfostCluster;

charszErrMsg[128];//错误信息

}

具体请参见ov_cs.xml/ov_cproto.h中的数据结构定义。

3.3选择游戏分区

1、请求:

由GameClient发送CS_CMD_CHOOSE_SUBWORLD消息,选择一个ZoneServer组

消息ID包含在包头中。

消息体:

typedefstruct{

charcWorldId;//游戏区编号,WORLDID

charcZoneSvrGrpId;//游戏分区编号,ZoneServer组的编号;

//如果为0则表明由Server自动选择一个ZoneServer

}ChooseZoneRequest;

2、响应:

由DirServer返回CS_CMD_CHOOSE_SUBWORLD结果,包含了一个可进行连接的ZoneServer的URL信息

消息体:

typedefstruct{

charcType;

union{

charszErrMsg[128];

charszConnectUrl[64];//具体的某个ZoneServer/ZoneConnect的连接IP和端口

}

}

具体请参见ov_cs.xml/ov_cproto.h中的数据结构定义。

DirServer在接收到CS_CMD_CHOOSE_SUBWORLD请求后,将从该ZoneServer组中选择一个相对闲的ZoneServr,返回给GameClient,以便后者重新建立连接,进入游戏。

3.4消息流程

4其它注意事项

4.1zoneserver与地图的分布关系

一个zoneserver负责若干张地图,而zoneserver能容纳的在线人员是有限制的。

玩家在发生角色切换时,并不一定能成功。

所以,对于容易造成“热点”的地图,比如新手村、某一类怪物集中的地方,在进行地图分布设计时,需要预先避免都集中到一个zoneserver所负责的地图里。

4.2GameClient保存最后登陆的ZoneServer信息

若DirServer返回的zoneserver信息和上次该玩家登陆的zoneserver不一致,而且两者都属于同一个WORLD时,GameClient应先与后者进行连接进入游戏,尽量地减少服务器端隐含的切换zoneserver动作(在目前的处理流程下,完全避免是不可能的)。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1