您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > training_server_cn
BigWorld技术培训服务器端概要BigWorld服务器概览实现一个entityEntity的通信Entity核心部分Cell功能集服务器设置和维护服务器的profiling和压力测试Session1BigWorld服务器概要BigWorld服务器SwitchFabricInternetSwitchFabricBaseAppCellAppLoginAppBaseAppBaseAppCellAppCellAppDBMgrWorldserverCellAppLoginAppCellAppDatabaseCellAppMgrBaseAppMgrClientClientClientClientClientLoginApp与客户端的第一个连接点固定的端口初始通信时加密公用密钥对(任意长度的密钥)用户名/密码使用多个LoginApps使得负载均衡DNS轮流调度BaseApp与客户端通信的固定点客户端与CellApp通信的中介与客户端的连接均衡地分担在各BaseApp间用于处理没有空间属性的entity拍卖行公会管理管理器每个BaseApp同时担任着为其它BaseApp容错的角色通常一个CPU/核上处理一个BaseAppBaseEntity两种baseentityBaseProxyBase通常的游戏entity例如:存储在数据库里的NPC,拍卖行…Proxy与客户端连接特殊的baseBaseApp容错备份entity到其它的baseappsBaseAppBaseAppBaseAppBaseApp自己的baseentity其他baseApp的baseentity的备份BaseApp容错BaseApp变得不可用BaseAppBaseAppBaseAppBaseApp自己的baseentity其他baseApp上的baseentity的备份BaseApp容错垮掉的baseApp上的entity在它们的备份entity上复活BaseAppBaseAppBaseAppBaseApp自己的baseentity其他baseApp上的baseentity的备份BaseApp容错与垮掉的baseApp连接的客户端会被断开连接所有的数据都被存储了当重连接后,它们将继续与其原来的entity连接(如果没有timeout的话)BaseApp管理器(BaseAppMgr)负责管理BaseApp间的负载平衡监视所有的BaseApp以实现各个BaseApp之间的容错主要用于玩家登录和创建entity1个服务器群组有一个BaseAppMgr实例当垮掉时用Reviver来复活如果2个以上的BaseApp垮掉了那么整个服务器群组会关闭可以自定义,但是不安全CellApp空间数据的处理处理玩家交互的游戏的空间(space)处理在space内的entity处理space内的一个区域(Cell)一个cellapp在一个space上的cell只会有一个一个celapp有可能处理多个space通常一个CPU/核上处理一个CellAppCells和SpacesSpaces通过cells来实现平衡负载每个space至少含有一个cell每个cell处理space的一个区域Cell的边界根据cell的负载而移动Cells不影响客户端的游戏经验Cell5Cell8Cell9Cell7Cell1Cell2Cell3Cell4Cell6Space1CellApp的负载管理entity的总数量Entity的通信的频率用户操作的:方法调用系统地自动的:属性的更新Entity的密集度Entity脚本Entity的数据大小Entity和Cell每个space至少有一个entity初始space例外CellApp上的每个玩家entity都有一个witness对象Witness跟踪周围的entityEntity的兴趣范围(AOI)缺省是500m是可以自定义的,依赖于很多因素Entity和CellEntity们穿越cell边界是无缝的客户端不会感觉到(穿越边界的发生)每个Cell维护着一个list,存放着在其边界外沿的entityGhostentities500m(和AoI同值)Cell2HoldsghostentityCell1Holdsrealentity500mradiusEntity:Real和Ghostrealentity是权威的entity一个ghostentity是从邻近的cell的对应的entity的部分数据的拷贝RealentitiesGhostentities500mCell1Ghostentity解决跨越cell边界的entity的交互问题方法调用转发给其realentity属性一个属性可以是realonly的:例如:将永远不会存在于ghost上如果一个属性对于客户端是可见的,那么该属性必须是可以ghost的当前的武器装备类型名字Ghost属性是只读的要更改属性值只能通过方法调用来更新其对应的realentityEntity的数据更新客户端实现LoD以加速渲染CellApp实现LoD以减少:带宽的消耗每个entity的CPU消耗LoD在CellApp上的作用类似于在客户端的作用细节程度是相对于玩家entity与之的距离的客户端entity方法可以实现LoDEntity属性实现LoD可以避免不必要的通信到客户端当前的武器(对于很远的距离(的entity)来说是不可见的)CellApp管理器(CellAppMgr)CellAppMgr知道:所有的CellApp(及它们的负载)所有的cell边界所有space管理CellApp的负载平衡告诉CellApp们它们的cell边界应该在哪里把新建的entity加入到正确的cell上1个服务器群组一个CellAppMgr实例当垮掉时用Reviver复活服务器能够继续运作(没有负载平衡功能)Database管理器(DBMgr)管理entity数据的数据库存储负责数据库与其余的服务器间的entity信息的通信支持的数据库类型:XML(用于快速的原型)MySQL(用于产品的开发)…你自己定制(提供DBMgr的全代码)可与你的收费系统集成独立的机器Entity备份存档在BaseApp间轮流调度处理BaseApp向cell要数据再传给DBMgrReviver复活垮掉的服务器进程不是必要的但是对运营非常有用是一个隐匿的执行程序能收到进程垮掉的消息重新启动进程并停止自己的reviver工作可以被制定成继续reviver工作主要用于复活管理器BigWorld机器Daemon(bwmachined)Daemon用于监视服务器进程每个服务器机器上有一个bwmahcined启动/停止服务器进程通知服务器群组各个进程的存活状态例如:当有进程垮掉时候通知Reviver监视机器的使用状态CPU/内存/带宽服务器进程间的通信Mercury基于UDP上的远程过程调用(RPC)协议可靠的通信一些用语:Bundle一组被发送的消息的集合Channel2个服务器进程间的通信的通道例如:Client于Proxy间的通道BigWorld服务器系统SwitchFabricInternetSwitchFabricBaseAppCellAppLoginAppBaseAppBaseAppCellAppCellAppDBMgrWorldserverCellAppLoginAppCellAppDatabaseCellAppMgrBaseAppMgrClientClientClientClientClient同时运行守护进程bwmachined*************通常的操作2个CellApps1个BaseApp应游戏的不同而不同早profile,经常profile应放在独立的机器的进程:DBMgrServerTools登录过程客户端发登录请求hostname/port是指定的LoginApp收到登录请求解密请求消息LoginApp转发登录消息到DBMgrDBMgr验证用户名/密码查询数据库转发请求到BaseAppMgrBaseAppMgr发送创建playerentity的消息到负载最小的BaseAppBaseApp创建一个新的proxy可能会创建一个新的cellentityProxy的UDP端口被返回给客户端途径BaseAppMgr,DBMgr,LoginAppSession2实现一个entityEntity的文件列出了所有的entity定义entity的属性和方法(XML)实现属性和方法(Python)resscriptsentities.xmlbasecellcliententity_defsentity.pyBaseApp脚本entity.pyCellApp脚本entity.pyClient脚本entity.def定义文件commonentity.py公用的scriptCell,base,client相互之间共用的实现函数server_commonentity.py公用的scriptCell,base相互之间共用的实现函数Entity的实现每个entity必须:在entities.xml文件的列表里必须有一个Entity_name.def文件每个entity可以:有最多3个部分的实现(client/cell/base)使用common路径下的共享的脚本Client/Server的定义文件必须匹配分布式的entityCell1Cell2SpaceSACBABCCABCellApp1CellApp2serverclientClientAACBClientBACBClientCACBABaseApp1BCBaseApp2RealcellentityGhostcellentityBaseentityPlayercliententityCliententityCell3CellApp3CAB简单的角色entityrootPropertiesnameTypeSTRING/TypeFlagsALL_CLIENTS/FlagsPersistenttrue/Persistent/name/PropertiesClientMethods/ClientMethodsBaseMethods/BaseMethodsCellMethodssetNameExposed//setName/CellMethods/rootEntity继承Entity定义文件支持继承res/scripts/entity_defs/interfaces两种继承机制Parent继承所有的东西属性/方法Volatile属性定义LoD级别简单级别的继承Implements继承属性和方法多级别的继承PlayerEntityrootImplementsInterfaceSimpleCharacter/Interface/Implements.../rootEntity属性类型像所有语言一样为网络传输/数据库存储标准化缺省值由类型决定可以在定义文件里覆盖广播形式的标志DetailLevelVolatile信息是否存储到数据库Entity定义数据类型简单类型INT8/UINT8FLOAT32/FLOAT64STRINGVECTOR3…序列类型ARRAYTUPLEEntity定义类型rootPropertiesnameTypeSTRING/Type/namearmorCol
本文标题:training_server_cn
链接地址:https://www.777doc.com/doc-3851227 .html