kbengine:简单介绍
之前想分析一个开源服务器很久了,思前想后,还是选择了kbengine。
KBEngine的服务端底层框架使用c++编写,游戏逻辑层使用Python(支持热更新)。现在服务器大多数是用C++做的,python作脚本也比较多,另外一个就是lua。
kbengine底层架构被设计为多进程分布式动态负载均衡方案, 理论上只需要不断扩展硬件就能够不断增加承载上限,单台机器的承载上限取决于游戏逻辑本身的复杂度。这里对多进程分布式不是很理解,以后再解答。
kbengine主要组件
baseapp,baseappmgr,cellapp,cellappmgr,dbmgr,loginapp,machine。
工作组件:
bot,guiconsole,interfaces,logger。
后缀有mgr的组件都是相应的管理器。
数据库用的是mysql,可以考虑一下加上redis。
必要组件描述
· loginapp:
登录验证、注册、接入口。可在多台机器部署多个loginapp进程来负载。
· dbmgr:
高性能多线程的数据存取。默认使用Mysql作为数据库。
· baseapp:
客户端与服务端的交互只能通过loginapp分配的baseapp来完成。定时写entity的数据到数据库、baseapp数据相互备份、灾难恢复。可在多台机器部署多个baseapp进程来均衡负载。脚本层通常会选择在baseapp上实现如:社交系统、广播聊天、排行、游戏大厅、等等逻辑系统。
· baseappmgr:
协调所有baseapp的工作,包括baseapp负载均衡处理等。
· cellapp:
处理游戏与空间和位置有关的逻辑,如:AOI、Navigate、AI、战斗等等。可在多台机器部署多个cellapp进程来动态均衡负载。
· cellappmgr:
负责协调所有cellapp的工作,包括负载均衡处理等。
· machine:
抽象出一个服务端硬件节点(一台硬件服务器只能存在一个这样的进程)。主要用途是接收远程指令处理本机上的组件启动与关闭, 提供本机上运行组件的接入口以及收集当前机器上的一些信息, 如:CPU、内存等。 这些信息会提供给一些对此比较感兴趣的组件。
· client:
客户端我们将提供基础框架,这个框架不包括渲染部分和输入输出部分的具体实现, 我们将提供一个lib文件和一套API接口,开发者可以选择使用自己比较适合的图形渲染引擎与输入输出控制部分。Unity3D, HTML5, Cocos2d等技术我们提供了相关插件,能够快速的和服务端对接。
工具组件描述
· interfaces:
支持快速接入第三方计费、第三方账号、第三方数据, 快速与运营系统耦合。
· logger:
收集和备份各个组件的运行日志。
其它组件描述
服务端组成
架构:
- |----------|
- | client | x N
- |----------|
- ------------------------|-----|-------------------------------
- |----------| |----------| |----------|
- | loginsrv | x N | basesrv | x N |basesrvmgr| x 1
- |----------| |----------| |----------|
- ------------------------|-----|-------------------------------
- |----------| |----------|
- | cellsrv | x N |cellsrvmgr| x 1
- |----------| |----------|
- ------------------------|-----|-------------------------------
- |----------| |----------|
- | dbmgr | x 1 |interfaces| x 1
- |----------| |----------|
- ------------------------|-----|-------------------------------
- |----------|
- | mysql | x 1
- |----------|
目录结构:
- |- kbengine (KBE_ROOT 根目录)
- |- assets (默认的游戏项目资产库,你可以添加新的资产库通过环境变量绑定)
- |- res (所有资源文件)
- |- spaces (通常存放游戏场景相关的资源,例如Navmesh)
- |- server (通常放置服务端相关的配置文件)
- |- scripts (所有的游戏逻辑,Python文件)
- |- base (Base的Python逻辑)
- |- cell (Cell的Python逻辑)
- |- client (Client的Python逻辑)
- |- bots (机器人的Python逻辑,压力测试)
- |- common (逻辑公共文件夹)
- |- data (游戏逻辑用到的数据资源)
- |- db (dbmgr扩展脚本)
- |- entity_defs (实体定义与声明)
- |- interfaces (实体的接口声明)
- |- server_common (服务端逻辑公共)
- |- user_type (自定义用户类型目录)
- |- kbe (引擎目录)
- |- tools (引擎工具)
- |- server (引擎服务端工具)
- |- guiconsole (可视化的控制台工具)
- |- install (引擎安装工具)
- |- pycluster (跨平台的集群控制Python脚本工具)
- |- xlsx2py (游戏数据表导出工具)
- |- src (KBEngine源代码)
- |- build (makefile公共脚本)
- |- client (客户端插件和例子目录)
- |- kbengine_dll (Windows应用程序插件源代码)
- |- common (公共目录)
- |- lib (各种模块源代码)
- |- client_lib (客户端底层公共框架)
- |- cstdkbe (KBEngine标准库)
- |- db_mysql (Mysql存取实现)
- |- dbmgr_lib (数据存取公共接口)
- |- dependencies (依赖库)
- |- entitydef (实体定义解析模块)
- |- helper (一些通用的协助性模块)
- |- math (数学相关)
- |- navigation (2D/3D导航模块)
- |- network (网络模块)
- |- pyscript (脚本插件)
- |- python (python源代码)
- |- resmgr (资源管理器)
- |- server (服务端公共模块)
- |- thread (多线程模块)
- |- xmlplus (xml解析库)
- |- libs (编译后的*.lib, *.a文件)
- |- server (服务端app源代码)
- |- baseapp (baseapp源代码)
- |- baseappmgr (baseappmgr源代码)
- |- cellapp (cellapp源代码)
- |- cellappmgr (cellappmgr源代码)
- |- dbmgr (dbmgr源代码)
- |- loginapp (loginapp源代码)
- |- machine (machine源代码)
- |- resourcemgr (resourcemgr源代码)
- |- tools (服务端助手工具)
- |- interfaces (支持第三方计费、第三方账号等接口)
- |- bots (压力测试, 虚拟客户端, 源码)
- |- guiconsole (可视化的控制台工具源码)
- |- message_log (服务端log收集工具源码)
- |- res (引擎资源目录)
- |- key (RSA密钥)
- |- scripts (Python脚本库)
- |- server (服务端引擎配置)
- |- log4cxx_properties (log4cxx配置)
- |- doc (指南文档源代码)
- |- bin (编译后的可执行文件存放目录)
- |- client (编译后的客户端exe可执行文件存放目录)
- |- server (编译后的服务端可执行文件存放目录)
- |- logs (服务端运行日志)
- |- tutorial (指南文档)
kbengine:简单介绍的更多相关文章
- kbengine简单介绍(1)
什么是kbengine? 一款开源的游戏服务端引擎,客户端通过简单的约定协议就能与服务端通讯, 使用KBEngine插件能够快速与(Unity3D, OGRE, Cocos2d-x, HTML5, 等 ...
- [原创]关于mybatis中一级缓存和二级缓存的简单介绍
关于mybatis中一级缓存和二级缓存的简单介绍 mybatis的一级缓存: MyBatis会在表示会话的SqlSession对象中建立一个简单的缓存,将每次查询到的结果结果缓存起来,当下次查询的时候 ...
- 利用Python进行数据分析(7) pandas基础: Series和DataFrame的简单介绍
一.pandas 是什么 pandas 是基于 NumPy 的一个 Python 数据分析包,主要目的是为了数据分析.它提供了大量高级的数据结构和对数据处理的方法. pandas 有两个主要的数据结构 ...
- 利用Python进行数据分析(4) NumPy基础: ndarray简单介绍
一.NumPy 是什么 NumPy 是 Python 科学计算的基础包,它专为进行严格的数字处理而产生.在之前的随笔里已有更加详细的介绍,这里不再赘述. 利用 Python 进行数据分析(一)简单介绍 ...
- yii2的权限管理系统RBAC简单介绍
这里有几个概念 权限: 指用户是否可以执行哪些操作,如:编辑.发布.查看回帖 角色 比如:VIP用户组, 高级会员组,中级会员组,初级会员组 VIP用户组:发帖.回帖.删帖.浏览权限 高级会员组:发帖 ...
- angular1.x的简单介绍(二)
首先还是要强调一下DI,DI(Denpendency Injection)伸手获得,主要解决模块间的耦合关系.那么模块是又什么组成的呢?在我看来,模块的最小单位是类,多个类的组合就是模块.关于在根模块 ...
- Linux的简单介绍和常用命令的介绍
Linux的简单介绍和常用命令的介绍 本说明以Ubuntu系统为例 Ubuntu系统的安装自行百度,或者参考http://www.cnblogs.com/CoderJYF/p/6091068.html ...
- iOS-iOS开发简单介绍
概览 终于到了真正接触IOS应用程序的时刻了,之前我们花了很多时间去讨论C语言.ObjC等知识,对于很多朋友而言开发IOS第一天就想直接看到成果,看到可以运行的IOS程序.但是这里我想强调一下,前面的 ...
- iOS开发多线程篇—多线程简单介绍
iOS开发多线程篇—多线程简单介绍 一.进程和线程 1.什么是进程 进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 比如同时打开QQ.Xcod ...
- iOS开发UI篇—UITabBarController简单介绍
iOS开发UI篇—UITabBarController简单介绍 一.简单介绍 UITabBarController和UINavigationController类似,UITabBarControlle ...
随机推荐
- sys.modules[__name__]的一个实例
关于sys.modules[__name__]的用法,百度上阅读量比较多得一个帖子是:https://www.cnblogs.com/robinunix/p/8523601.html 对于里面提到的基 ...
- [UE4]Authority,网络控制权
复制的条件 1.是否可复制开关打开 2.而且是服务器创建,或者放在关卡中. Authority,网络控制权 1.在网络游戏中,由当前进程创建的Actor,对其拥有网络控制权 2.Has Authori ...
- [UE4]Delay的使用技巧:改变引擎执行顺序
如果要游戏一开始就让机器人开火,但这是引擎还没有执行到武器的创建步骤,就可以使用“Delay”并设置函数的等待时间,让引擎先执行创建枪的步骤,然后机器人开火就没问题了.
- SCCM2012 R2实战系列之四:初始化配置
在之前的文章中,我们已经完成了SCCM 2012 R2 独立主站点的部署.为了客户端代理软件的顺利安装和OSD操作系统的分发,我们需要配置组策略及DHCP服务.在本系列的第四部分,跟大家一起分享下如何 ...
- github .net core
https://github.com/dotnet/core/blob/master/Documentation/core-repos.md
- MySQL 之主从同步-半同步模式配置
从MySQL5.5开始,MySQL以插件的形式支持半同步复制.如何理解半同步呢?首先我们来看看异步,全同步的概念 异步复制(Asynchronous replication) MySQL默认的复制即是 ...
- keras训练和保存
https://cloud.tencent.com/developer/article/1010815 8.更科学地模型训练与模型保存 filepath = 'model-ep{epoch:03d}- ...
- Spark SQL快速离线数据分析
拷贝hive-site.xml到spark的conf目录下面 打开spark的conf目录下的hive-site.xml文件 加上这段配置(我这里三个节点的spark都这样配置) 把hive中的mys ...
- [SHOI2012]信用卡凸包(计算几何)
/* 考验观察法?? 可以发现最终答案等于所有作为圆心的点求出凸包的周长加上一个圆的周长 向量旋转 (x1, y1) 相较于 (x2, y2) 旋转角c 答案是 (dtx * cosc - dty * ...
- 用socket发送信息在浏览器上显示出来
服务端代码: import socket def main(): sock=socket.socket() sock.bind(('localhost',8089)) sock.listen(5) w ...