KBEngine源码:Entity
KBEngine是一款开源的MMOG游戏服务端引擎,
使用C++编写,用
Python脚本即可简单高效的完成任何游戏逻辑(支持热更新)。
KBEngine底层架构被设计为多进程分布式动态负载均衡方案,理论上只需要不断扩展硬件就能够不断增加承载上限,单台机器的承载上限取决于游戏逻辑本身的复杂度。
基于实体entity的开发。
Entity实体被定义为服务端最基本的对象,类似Python的基础对象object。我们的通讯(远程访问)是通过Entity上的方法申明;我们的数据存储(数据库持久化存储)也是通过Entity上的属性进行。我们可以大体的理解为,引擎端的开发是基于Entity实体的。
实体包含哪几部分?
1、base部分:实体在Baseapp上的对象(或称为实现),这部分叫做base部分。
2、cell部分:实体在Cellapp上的对象(或称为实现),这部分叫做cell部分。
3、client部分:实体在客户端上的对象(或称为实现),这部分叫做client部分。一般在客户端上进行实现,不在服务端范围内;
特殊的Entity
有一个特殊的Entity实体–Proxy,它是Entity的子类,俗称代理类。它是连接客户端和服务端的通讯通道,但一个客户端只能拥有并控制一个Proxy,通过它可以把客户端的控制、交互传递给该实体的base和cell上。它只有在base上有而cell上没有。
Entity实体创建
https://www.comblockengine.com/docs/1.0/get-started/createentity/
ps:
传统MMO架构(就是之前说的天龙、倩女类架构),一个进程维护多个场景,每个场景里多个玩家,额外的中心进程负责帮玩家从一个场景/进程切到另一个场景/进程。bigworld架构,如果剥离开其围绕切进程所做的一些外围设施,核心工作流程基本就能用这一段话描述。
EntityComponent
现引擎已支持基于组件的开发,组件是attach到entity上的一个单元,可以在不同类型entity上进行重用,大大加强了引擎开发能力。
如控制位置的组件Motion,该组件只对entity的位移做控制,如此一来Avatar、Monster等都可以attach该组件,而不用反复编写位移的代码。
参考: