当前位置: 首页 > 工具软件 > KBEngine > 使用案例 >

游戏开发神器——KBEngine浅见

胡曾笑
2023-12-01

1.什么是KBEngine?

KBEngine是一款开源的游戏服务端引擎,使用简单的约定协议就能够使客户端与服务端进行交互, 使用KBEngine插件能够快速与(Unity3D, OGRE, Cocos2d, HTML5, 等等)技术结合形成一个完整的客户端。

2.什么是Switch Fabric?

Switch Fabric是利用新一代开关器件结合交叉分组技术实现的一种交叉开关网络,系统中多个点到点的通信链路被组织在一起,最终能够实现所有芯片或模块间的任意互连和并发传输,系统带宽从而成倍的增加。

3.在KBEngine服务器架构中,客户端可见的是Loginapp和Baseapp,不可见的是Cellapp,BaseappMgr,CellappMgr和DBMgr

4.Loginapp是客户端登录时的连接点,当客户端向指定的IP/端口发送登录请求时,对应服务器的Loginapp收到登录请求并解密请求信息,将解密后的请求信息发给DBMgr进行验证,验证通过后将请求转发给BaseappMgr,BaseappMgr指定一个Baseapp来创建新的Proxy,最后将创建好的Proxy的TCP端口返回给客户端。客户端就直接与Baseapp连接,不再经过Loginapp。

5.Baseapp是与客户端通信的固定点,主要用于处理没有空间位置属性的Entity,Base Entity主要分为Base和Proxy两种,Base代表通常的游戏Entity,比如游戏中的NPC,Proxy代表与客户端连接的代理。

6.Cellapp是服务器内部的处理,不暴露给客户端。主要用于处理在Space内的一个Cell内的Entity。一个Space里可以有多个Cellapp的Cell,一个Cellapp也可以处理多个Space。Cellapp上的每个玩家Entity都有一个AOI,在AOI范围内的其他Entity的信息会发给客户端,同时实现LOD来降低消耗,提高效率,即其他Entity离的越远,细节程度越低。

7.BaseappMgr负责管理Baseapp之间的负载平衡,用于玩家登陆分配和创建Entity。CellappMgr负责管理Cellapp之间的负载平衡,用于把新建的Entity加入到正确的Cell上。DBMgr负责管理Entity数据的数据库存储

8.Entity的实现:每个Entity必须在entities.xml文件列表中,必须有一个<Entity_name>.def文件和<Entity_name>.py文件。每个Entity可以有最多3个部分的实现(Client Entity/Base Entity/Real Entity和Ghost Entity)

9.Entity的属性:(1)类型(Type):常用的数据类型比如INT8/UINT8,STRING,序列类型比如ARRAY,TUPLE等。复杂类型有FIXED_DICT和PYTHON

(2)缺省值(Default):由类型决定

(3)Volatile信息

(4)是否存储到数据库(Persistent)

(5)Cell上的属性

(6)Base上的属性

(7)Client上的属性

10.Entity属性的发布:(1)BASE:属于Base,只有Base可以访问,只有对应的Baseapp可以访问。

(2)BASE_AND_CLIENT:属于Base,Base和自己的客户端可以访问,只有对应的Baseapp可以访问。

(3)CELL_PRIVATE:属于Real Entity,只有Real Entity和对应的Cellapp可以访问。

(4)CELL_PUBLIC:属于Real Entity,它所属于的Real Entity和对应的Ghost Entity都可以访问。

(5)CELL_PUBLIC_AND_OWN:属于Real Entity,它所属于的Real Entity,对应的Ghost Entity都可访问,该属性改变时会发布到自己的客户端。

(6)ALL_CLIENTS:属于Real Entity,他所属的Real Entity,对应的Ghost Entity都可访问,该属性改变时会发布到自己的客户端以及在AOI范围内的其他玩家的客户端。

(7)OWN_CLIENT:属于Real Entity,它所属的Real Entity和自己的客户端可以访问。

(8)OTHER_CLIENTS:属于Real Entity,它所属的Real Entity,对应的Ghost Entity和其他的客户端都可以访问。该属性改变时会发布到在AOI范围内的其他玩家的客户端。

11.Mailbox是Entity的一部分,所有的Entity都含有Mailbox成员变量,其中

ClientEntity含有self.cell,self.base;

BaseEntity含有self.cell;

CellEntity含有self.base,self.ownClient(自己的客户端调用),

     self.allClient(在AOI范围内的所有客户端调用(包括自己)),

     self.otherClient(在AOI范围内的所有客户端调用(不包括自己))。

不能传递Mailbox给客户端,取而代之用Entity ID

12.Controller的作用是为了更好地实现Entity的一些控制功能,将Entity中重要的一些底层功能抽出,通过异步执行的方式实现一些需要大量时间去完成的功能,比如移动,陷阱等。一个Entity可以有无数个Controller,类似于从进程中分离多个线程,它们并发异步运行,但又不影响主进程的运行。

13.tick方式是指主进程有一个定时器timer,每隔一段时间(0.1s)调用一次,如果超时会使进程通讯中断,从而造成游戏卡顿的风险。KBE的脚本行为都是通过tick方式来驱动。

 类似资料: