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 ...
随机推荐
- [UE4]射击起点、终点的计算方法
一.射击起点,这个简单,一般是以角色的相机位置为作为射击起点,而不是枪口的位置作为起点 二.射击终点,角色朝向 * 射击距离 + 射击起点 角色朝向:单位向量 角色朝向 * 射击距离:向量长度 向量长 ...
- [UE4]函数和事件的区别
一.函数有返回值,事件无返回值 二.函数调用会等待函数执行结果,事件调用只是触发但不会等待. 三.函数执行在同一个线程,事件执行在不同线程. 四.函数可以用局部变量,事件没有局部变量. 五.因为函数执 ...
- BCGcontrolBar(七) 添加仪表盘、动态图表显示等控件
BCG的 BCGPGaugesDemo有众多仪表盘控件可以参考使用 编写时同ListCtrl一样 在停靠面板上加入仪表盘和动态曲线 主要代码 //插入CPU图形 pContainer->SetF ...
- module 'pip' has no attribute 'pep425tags'
AMD64 import pip._internal print(pip._internal.pep425tags.get_supported()) 1 2 WIN32 import pip prin ...
- SQL Server 2016:内存列存储索引
作者 Jonathan Allen,译者 谢丽 SQL Server 2016的一项新特性是可以在“内存优化表(Memory Optimized Table)”上添加“列存储索引(Columnstor ...
- Java方法通过RestTemplate调用restful接口
背景:项目A需要在代码内部调用项目B的一个restful接口,该接口是POST方式,header中 Authorization为自定义内容,主要传输的内容封装在body中,所以使用到了RestTemp ...
- WPF vs2015,vs2012 添加ArcObjects SDK
一:如果是vs2015,找到注册表中HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\14.0\下面的这两个,并且将名称和数 ...
- 最小化安装CentOS 7后,图形界面的安装(GNOME、KDE等)
安装图形化界面: 1.首先安装X(X Window System),命令为 yum groupinstall "X Window System" 2.检查一下我们已经安装的软件以及 ...
- ubantu 操作
应用程序启动器“monodevelop.desktop”还没有被标记为可信任的. 于是在网上查询解决方案,在ubuntu中文论坛找到一个帖子提到这个问题的解决方法,尝试之解决. 帖子地址:http:/ ...
- promise请求数据用法
Promise简介 Promise 是异步编程的一种解决方案,比传统的解决方案–回调函数和事件--更合理和更强大.ES6将其写进了语言标准,统一了语法,里面保存着某个未来才回结束的事件(通常是一个异步 ...