什么是KBEngine
本文转自:https://github.com/harmy/kbengine
什么是KBEngine?
KBEngine是一款开源mmog服务端引擎, 使用统一协议能够轻松与前端对接,能轻松使用unity3d、 ogre、 cocos2d、 html5等作为前端表现。
底层框架由c++编写, 逻辑层使用python, 开发者无需重复实现一些通用的底层服务端技术, 使开发者能够真正集中精力到游戏开发上来, 快速打造各种游戏。
(经常被问到承载上限, kbengine底层架构被设计为多进程分布式动态负载均衡方案, 理论上只需要不断扩展硬件就能够不断增加承载上限, 单台机器的承载上限取决于游戏逻辑本身的复杂度。)
简单的介绍一下引擎的各个主要组件部分:
· loginapp:
client的登录验证, 验证通过则向客户端发放一个baseapp的地址, 之后客户端通过baseapp与服务端交互。
可在多台机器部署多个loginapp进程来负载。
· dbmgr:
实现数据的存取,默认使用mysql作为数据库。
· baseappmgr:
主要负责协调所有baseapp的工作,包括负载均衡处理等。
· baseapp:
客户端与服务端的交互只能通过loginapp分配的baseapp来完成。
定时写entity的数据到数据库、 baseapp数据相互备份。
可在多台机器部署多个baseapp进程来均衡负载。
· cellappmgr:
主要负责协调所有cellapp的工作,包括负载均衡处理等。
· cellapp:
主要处理游戏实时逻辑, 如:aoi, navigate, ai, 休闲游戏房间内逻辑等等。
可在多台机器部署多个cellapp进程来动态均衡负载。
· client:
客户端我们将提供基础框架,这个框架不包括渲染部分和输入输出部分的具体实现,
我们将提供一个lib文件和一套API接口,开发者可以选择使用自己比较适合的图形渲染引擎与输入输出控制部分,
(目前已实现的ClientSDK版本: Unity3d、Ogre、Html5)
· kbmachine:
抽象出一个服务端硬件节点(一台硬件服务器只能存在一个这样的进程)。主要用途是接受远程指令处理本机上的组件启动与关闭,
提供本机上运行组件的接入口以及搜集当前机器上的一些信息,
如:CPU, 内存等。 这些信息会提供给一些对此比较感兴趣的组件。
· guiconsole:
这是一个控制台工具, 可以实时的观察服务端运行状态, 实时观测不同space中entity的动态,
并支持动态调试服务端python逻辑层以及查看各个组件的日志,启动服务端与关闭等。
· messagelog:
收集和备份各个组件的运行日志,可使用guiconsole来查看和搜索相关信息。
GO!
设置环境变量:
kbe会读取KBE_ROOT,KBE_RES_PATH, KBE_HYBRID_PATH系统环境变量来做一些事情。
Linux: (假设kbe被放置在~/目录下)
[kbe@localhost ~]# vim ~/.bashrc
ulimit -c unlimited
export KBE_ROOT=~/kbengine/
export KBE_RES_PATH=$KBE_ROOT/kbe/res/:$KBE_ROOT/demo/:$KBE_ROOT/demo/res/
export KBE_HYBRID_PATH=$KBE_ROOT/kbe/bin/Hybrid64/
[root@localhost ~]# vim /etc/passwd
修改系统账号的uid必须唯一, uid用来区分不同的服务端组, 如果二台硬件维护一组服务端那么二台硬件上的uid必须一致,
值需大于0。
Windows:
鼠标右键"我的电脑"->"高级"->"环境变量" 设置对应的值就好了。
设置以下环境变量
KBE_ROOT ~/kbengine/(注意:这个地方应该是输入你kbengine所在的目录路径)
KBE_RES_PATH $KBE_ROOT/kbe/res/:$KBE_ROOT/demo/:$KBE_ROOT/demo/res/
KBE_HYBRID_PATH=$KBE_ROOT/kbe/bin/Hybrid64/
(注意: Windows下需要在环境变量中添加UID, 值需大于0)
KBE_ROOT:
kbe根目录路径。
KBE_RES_PATH:
相关资源路径用':'或者';'分隔, 第一个res必须是kbe引擎的res, 第二个res必须是用户脚本根目录, 其他无限制。
KBE_HYBRID_PATH:
kbe二进制文件所在目录路径。
编译:
linux:
测试系统(x32&x64): centos >= 5.x, debian >= 5.x
编译器 gcc: >= 4.4.x
[root@localhost ~]# cd $KBE_ROOT/kbe/src
[root@localhost /src]# make
windows:
安装好vc2008sp1版本直接编译完即可
KBE_ROOT\kbengine\kbe\src\kbengine_vs90.sln
注意:
1: 如使用其他版本编译器最好将openssl、log4cxx(kbe\src\libs\*.a)也重新编译。
2: 某些平台上的mysql路径可能不是/usr/lib64/mysql/mysql_config
修改kbe\src\build\common.mak中的MYSQL_CONFIG_PATH=/usr/lib64/mysql/mysql_config
3: 在linux上编译完成如因为python无法初始化无法正常运行的情况(这是个bug http://bugs.python.org/issue11320):
cd src\lib\python
./configure
make
make install
再启动服务端。
配置数据库:
1: 安装好mysql
如果是windows系统则my.ini中加入如下代码使mysql大小写敏感
[mysqld]
lower_case_table_names=0
2: 记得重启mysql服务, 否则不生效(命令行cmd输入):
net stop mysql
net start mysql
3: 新建一个数据库, 假设数据库名为"kbe"
mysql> create database kbe;
4: 创建一个数据库账户, 假设用户名密码都为"kbe"
先删除匿名用户
mysql> use mysql
mysql> delete from user where user='';
mysql> FLUSH PRIVILEGES;
创建kbe用户
mysql> grant all privileges on *.* to kbe@'%' identified by 'kbe';
mysql> grant select,insert,update,delete,create,drop on *.* to kbe@'%' identified by 'kbe';
mysql> FLUSH PRIVILEGES;
在CMD中测试一下是否能使用这个账号登陆mysql(请注意默认mysql端口为3306, 如不一致请修改kbengine_defs.xml->dbmgr-><port>330x</port>),
如果没有提示错误则账号配置完毕, 有错误请google
进入你的mysql安装目录找到mysql.exe所在目录, 然后cmd进入这个目录中执行如下语句:
C:\mysql\bin> mysql -ukbe -pkbe -hlocalhost -P3306
5: 在res\server\kbengine_defs.xml的dbmgr节修改databaseName参数
(推荐在demo\res\server\kbengine.xml重载修改)。
如果mysql端口不是3306, 请在kbengine.xml中的dbmgr段加入<port>端口号</port>。
启动服务端:
Linux:
[root@localhost ~]# cd $KBE_HYBRID_PATH
sh start.sh
sh kill.sh
(注意: 如有防火墙限制请设置防火墙规则对外开放这些TCP端口: loginapp登录端口、 baseapp登录端口具体请看
kbengine.xml|kbengine_defs.xml。 以及UDP广播端口:20086-20088)
(注意: 如果有二块网卡, 例如: eth0(公网ip)、eth1(局域网ip)
请设置kbengine.xml|kbengine_defs.xml除baseapp|loginapp|billingsystem的externalInterface设置为eth0以外,
其他相关{internal|external}Interface为局域网ip的那块网卡(eth1), 并设置使用局域网ip来接收udp广播:
/sbin/ip route del broadcast 255.255.255.255 dev eth0
/sbin/ip route add broadcast 255.255.255.255 dev eth1
)
Windows:
cd KBE_HYBRID_PATH
!(win)fixedstart.bat
!(win)kill.bat
或者使用tools\server\guiconsole\guiconsole.exe来启动和关闭服务端。
(注意: Windows版本仅用于测试, 由于使用select并发socket处理性能有限。)
日志:
KBE_HYBRID_PATH目录下会产生各组件运行的日志信息"logs\*.log"。
也可以使用GUIConsole来查看, 但必须开启messagelog。
什么是KBEngine的更多相关文章
- kbengine里如何使用git快速下载项目?
项目有两个镜像,github[https://github.com/kbengine/kbengine.git] ,osc开源中国[https://git.oschina.net/likecg/kbe ...
- kbengine mmo源码(完整服务端源码+资源+完整客户端源码)
本项目作为kbengine服务端引擎的客户端演示而写 更新kbengine插件库(https://github.com/kbengine/kbengine_unity3d_plugins): ...
- kbengine Unity3d demo 代码执行流程(4)
当服务端成功启动,客户端链接服务端后进入demo中的游戏界面,demo中的功能包括注册.登录.角色管理.战斗.场景等等. 对于新接触kbengine的人,看见客户端的代码后会觉得很迷茫,有些无从下手. ...
- kbengine FAQ(3)
官方FAQ 下面是我遇到的一些问题: 1.服务端 "strtof" 未定义的标示符 对于我这个c++入门级都不算的新手,这个错误很挠头,这个错误是由于vc++版本问题,新版的语 ...
- kbengine环境搭建(2)
做好准备工作后,可以开始搭建我们的kbengine服务端,运行成功kbengine服务端,共有9个服务会相应的被打开,并会全部提示[info]found all components! 准备工作 1. ...
- kbengine简单介绍(1)
什么是kbengine? 一款开源的游戏服务端引擎,客户端通过简单的约定协议就能与服务端通讯, 使用KBEngine插件能够快速与(Unity3D, OGRE, Cocos2d-x, HTML5, 等 ...
- KBEngine WebConsole Guide
https://github.com/kbengine/kbengine/tree/master/docs
- KBEngine简单RPG-Demo源码解析(3)
十四:在世界中投放NPC/MonsterSpace的cell创建完毕之后, 引擎会调用base上的Space实体, 告知已经获得了cell(onGetCell),那么我们确认cell部分创建好了之后就 ...
- KBEngine简单RPG-Demo源码解析(2)
七:服务端资产库文件夹结构http://kbengine.org/cn/docs/concepts/directorys.html看assets, 注意:demo使用的不是默认的assets资产目录, ...
- KBEngine简单RPG-Demo源码解析(1)
一:环境搭建1. 确保已经下载过KBEngine服务端引擎,如果没有下载请先下载 下载服务端源码(KBEngine): https://github.com ...
随机推荐
- [Functional Programming ADT] Adapt Redux Actions/Reducers for Use with the State ADT
By using the State ADT to define how our application state transitions over time, we clear up the ne ...
- 虚拟机集群出现“Device eth0 does not seem to be present, delaying initialization” failed
问题再现: 解决办法: 1:编辑/etc/sysconfig/network-scripts/ifcfg-eth0配置文件,将ifcfg-eth0的配置文件里里面以前的关于MAC地址这一行删除掉.另外 ...
- Office 如何下载网页的视频 JWPlayer的内嵌视频
右击页面空白处,查看页面源代码 在里面搜索mp4或者swf,video,一般网页中的视频都是这些格式,仔细找一定能找到对应的地址 然后复制到迅雷下载即可
- VLC 源代码结构
x64 sudo apt-get install -y liblua5.2-dev libmad0-dev libavutil-dev libavcodec-dev libavformat-dev l ...
- MySQL删除表的时候忽略外键约束
删除表不是特别常用,特别是对于存在外键关联的表,删除更得小心.但是在开发过程中,发现Schema设计的有问题而且要删除现有的数据库中所有的表来重新创建也是常有的事情:另外在测试的时候,也有需要重新创建 ...
- jQuery切换事件
有html页面内容如下: <body> <h5 id="hh">关于jQuery的介绍</h5> <p id="p1" ...
- OpenERP|ODOO高德地图应用
发布时间:2015-04-06 11:01:37来源:http://www.chinamaker.net 在openerp中的fleet模块,每一个车辆都有地图应用.默认采用的是谷歌地图,但是在应用得 ...
- Struts2入门示例
1.导入struts2需要的9个包到lib文件夹中 2.配置web.xml文件 <?xml version="1.0" encoding="UTF-8"? ...
- HTML-HTML5+CSS3权威指南阅读(三、CSS选择器)
1.伪元素选择器 first-line, first-letter, before, after 2.属性选择器 [attr*=val]: 如果元素的 attr 属性中包含用 val 指定的字符的话, ...
- HTML5学习笔记1 HTML5 新元素
自1999年以后html4.0已经改变了很我,今天,在html4.01中的几个已经被废弃,这些元素在html5中已经被删除或重新定义. 为了更好地处理今天的互联网应用,html5添加了很多新元素及功能 ...