本文转自:https://github.com/harmy/kbengine

资源下载地址:http://sourceforge.net/projects/kbengine/files/

什么是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的更多相关文章

  1. kbengine里如何使用git快速下载项目?

    项目有两个镜像,github[https://github.com/kbengine/kbengine.git] ,osc开源中国[https://git.oschina.net/likecg/kbe ...

  2. kbengine mmo源码(完整服务端源码+资源+完整客户端源码)

      本项目作为kbengine服务端引擎的客户端演示而写 更新kbengine插件库(https://github.com/kbengine/kbengine_unity3d_plugins):    ...

  3. kbengine Unity3d demo 代码执行流程(4)

    当服务端成功启动,客户端链接服务端后进入demo中的游戏界面,demo中的功能包括注册.登录.角色管理.战斗.场景等等. 对于新接触kbengine的人,看见客户端的代码后会觉得很迷茫,有些无从下手. ...

  4. kbengine FAQ(3)

    官方FAQ 下面是我遇到的一些问题: 1.服务端   "strtof" 未定义的标示符 对于我这个c++入门级都不算的新手,这个错误很挠头,这个错误是由于vc++版本问题,新版的语 ...

  5. kbengine环境搭建(2)

    做好准备工作后,可以开始搭建我们的kbengine服务端,运行成功kbengine服务端,共有9个服务会相应的被打开,并会全部提示[info]found all components! 准备工作 1. ...

  6. kbengine简单介绍(1)

    什么是kbengine? 一款开源的游戏服务端引擎,客户端通过简单的约定协议就能与服务端通讯, 使用KBEngine插件能够快速与(Unity3D, OGRE, Cocos2d-x, HTML5, 等 ...

  7. KBEngine WebConsole Guide

    https://github.com/kbengine/kbengine/tree/master/docs

  8. KBEngine简单RPG-Demo源码解析(3)

    十四:在世界中投放NPC/MonsterSpace的cell创建完毕之后, 引擎会调用base上的Space实体, 告知已经获得了cell(onGetCell),那么我们确认cell部分创建好了之后就 ...

  9. KBEngine简单RPG-Demo源码解析(2)

    七:服务端资产库文件夹结构http://kbengine.org/cn/docs/concepts/directorys.html看assets, 注意:demo使用的不是默认的assets资产目录, ...

  10. KBEngine简单RPG-Demo源码解析(1)

    一:环境搭建1. 确保已经下载过KBEngine服务端引擎,如果没有下载请先下载          下载服务端源码(KBEngine):              https://github.com ...

随机推荐

  1. 获取web.py上面的示例code

    import requests import re import os.path #取得文件名和内容对应字典 def getCode(url): pattern=re.compile(r'<h\ ...

  2. Getting to grips with CakePHP’s events system

    CakePHP seems to get a slightly unfavourable reputation when compared to the likes of Symfony or Zen ...

  3. java中Token验证

    什么是Token:它是一个令牌,随机不可预测的. 为什么需要使用Token: 1,防止表单的重复提交 2:,防止跨站点的请求伪造 Token的使用流程是:首先在服务器端生成一个随机的token值并在服 ...

  4. Junit参数化测试Spring应用Dubbo接口

    一.创建基础类. package com.tree.autotest; import org.junit.Before;import org.springframework.context.annot ...

  5. Node.js mm131图片批量下载爬虫1.01 增加断点续传功能

    这里的断点续传不是文件下载时的断点续传,而是指在爬行页面时有时会遇到各种网络中断而从中断前的页面及其数据继续爬行的过程,这个过程和断点续传原理上相似故以此命名.我的具体做法是:在下载出现故障或是图片已 ...

  6. 超棒的JS移动设备滑动内容幻灯实现 - Swiper

    来源:GBin1.com 在线演示 如果你需要一款帮助你实现手机或者移动设备上内容幻灯实现的JS类库的话 , Swiper是一个不错的选择,它不依赖于任何第三方的类库.因此体积非常小,适合运行在移动设 ...

  7. rapidxml的常见读写操作

    rapidxml官网地址:http://rapidxml.sourceforge.net/ rapidxml只包含4个hpp头文件,把这四个头文件放到项目中,即可使用rapidxml #include ...

  8. 关于RTP中的时间戳问题

    关于RTP中的时间戳问题 时间戳单位:时间戳计算的单位不为秒之类的单位,而是由采样频率所代替的单位,这样做的目的就是为了是时间戳单位更为精准.比如说一个音频的采样频率为8000HZ,那么我们可以把时间 ...

  9. webDriver API——第13部分UI Support

    class selenium.webdriver.support.select.Select(webelement) deselect_all() Clear all selected entries ...

  10. 【VB编程】05.MsgBox与InputBox函数

    在VBA程序中,数据的输入输出是通过函数实现的,其实现的方式是通过对话框的形式表示出来的.例如MsgBox,Inputbox等,不要误认为是输入输出语句的关键字,其实仅仅是一个普通函数而已. [Msg ...