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 ...
随机推荐
- maven release版本不自动更新的原因
如果是release版本,首先从本地查找对应的版本,如果有,则使用本地,否则从远程服务器下载. 这也就是为什么我们有时想要去更新release版本的jar包,会发现无法更新,除非删除本地仓库中的版本. ...
- library之目录
组件之fragment: Android viewpager结合fragment的相关优化: 组件之webview: WebView的使用及实战(cookie同步和cookie清除); Android ...
- /storage/xx-xx/, /sdcard, /mnt/sdcard 三者的区别
本文针对Android 7.1 /sdcard是/mnt/sdcard的符号链,指向/storage/self/primary, /mnt/sdcard,也是符号链,指向/storage/self/p ...
- jscs sublime 插件配置 .jscsrc 文件
{ "disallowEmptyBlocks": true, "disallowKeywordsOnNewLine": ["else", & ...
- Spark2.X集群运行模式
rn 启动 先把这三个文件的名字改一下 配置slaves 配置spark-env.sh export JAVA_HOME=/opt/modules/jdk1..0_60 export SCALA_HO ...
- Java - 18 Java Scanner 类
java.util.Scanner是Java5的新特征,我们可以通过 Scanner 类来获取用户的输入. 下面是创建 Scanner 对象的基本语法: Scanner s = new Scanner ...
- Solr查询参数sort(排序)
摘要: Solr查询每一次返回的数据都有一定的顺序,特定顺序的结果对于业务来说可能非常重要. 不指定排序 一般我们不指定排序规则,这样的结果能满足大部分需求,默认是用文档的得分作为排序标准.相当于加上 ...
- Linux 安装redis 基本配置 发布订阅,安全配置,持久化 rdb ,aof
redis redis相关配置1.yum 源码 rpm yum 快速,间接,高效,解决依赖关系,(自动安装到某个路径,不可控),通过yum安装的软件查询命令 rpm -ql nginx yum源 ...
- 对datetime日期类型进行序列化的处理
datetime类型序列化 在工作中遇到从数据库中取出来一个datetime类型的数据,在对其进行序列化的过程中,报错python datetime.datetime is not JSON ser ...
- IIS w3wp对应的应用程序
IIS7以前我們用IISApp查看IIS哪些服務已啟動,但在IIS7已經不適用了,新語法是appcmd.exe list wp.你可以在%windir%\system32\inetsrv\底下找到ap ...