简介
KBEngine是一款 开源 的游戏服务端引擎,使用简单的约定协议就能够使客户端与服务端进行交互,使用KBEngine插件能够快速与(Unity3D, OGRE, Cocos2d, HTML5, 等等)技术结合形成一个完整的客户端。
配置编译方法
配置编译环境
安装依赖包。
yum install gcc-c++ autoconf automake libtool mysql-devel apr apr-devel apr-util apr-util-devel wget -y
获取源码
获取“kbengine-2.5.2”源码包。
cd /usr/local/src
wget https://github.com/kbengine/kbengine/archive/v2.5.2.tar.gz -O kbengine-2.5.2.tar.gz
编译和安装
步骤1: 执行如下命令,解压软件包。
tar -zxvf kbengine-2.5.2.tar.gz
步骤2 :执行如下命令,进入目录。
cd kbengine-2.5.2/kbe/src
步骤3 : 执行如下命令,编译源码。
make -j4
运行和验证
1.安装MySQL 数据库 。
参考《鲲鹏生态_mysql使用指南》安装MySQL。若已经安装,则可以跳过此步骤。
2.启动MySQL数据库。
a. root用户登录MySQL数据库,输入安装时设置的root用户密码,如图1-1所示。
图1-1 登录MySQL数据库
b. 执行如下命令,创建kbengine引擎需要的数据库和用户名。
说明:
下面命令中的“password”请根据实际情况替换。
create database kbe;
use mysql;
delete from user where user='';
FLUSH PRIVILEGES;
grant all privileges on *.* to kbe@'%' identified by 'password';
grant select,insert,update,delete,create,drop on *.* to kbe@'%' identified by 'password';
FLUSH PRIVILEGES;
c. 验证是否可以登录。
说明:
下面命令中的“password”请根据实际情况替换。
mysql -ukbe -ppassword -hlocalhost -P3306
若显示如图1-2所示,则表示kbe数据库和用户名创建成功。
图1-2 创建数据库成功
3. 上传kbengine引擎demo。
a.安装git。
yum install git
demo获取路径为:
https://github.com/kbengine/kbengine_stresstest
b.下载demo到根目录“kbengine-2.5.2”下,如图1-3所示。
git clone https://github.com/kbengine/kbengine_stresstest.git
图1-3 下载demo
c.将demo文件server_assets拷贝到目录kbengine-2.5.2下。
cp -r kbengine_stresstest/mmorpg/server_assets kbengine-2.5.2
d. ifconfig查看引擎部署节点的 ip地址 。
e.修改demo配置文件。
cd kbengine-2.5.2/server_assets/res/server
vim kbengine.xml
将数据库信息修改为如下:
说明:
“password”请根据实际情况替换。
<databaseInterfaces>
<default>
<!-- <host> localhost </host> -->
<!-- <databaseName> kbe </databaseName> -->
<host> 192.168.1.237 </host>
<port> 3306 </port>
<auth>
<username> kbe </username>
<password> password </password>
<encrypt> true </encrypt>
</auth>
</default>
</databaseInterfaces>
f. 修改机器人登录IP,为引擎部署节点IP,如图1-4所示。IP地址可用ifconfig查看。
图1-4 修改登录IP
g. 返回server_assets目录执行启动脚本,如图1-5所示。
sh start_server.sh
图1- 5 执行启动脚本
h. 查看进程是否启动正常,如图1-6所示。
ps -ef | grep kbe
图1-6 查看进程启动状态
4.最后执行python监控脚本查看游戏场景和实体是否创建完成,如图1-7所示。
实体数达到4544即可执行机器人进行压测。
python ../kbe/tools/server/pycluster/cluster_controller.py
图1-7 查看创建情况
5.机器人压测。
拷贝demo到另一个主机上并同引擎一样配置“kbengine.xml”文件,ip地址仍然填写引擎部署ip。
然后返回server_assets目录执行sh start_bots.sh压测脚本。
在服务端脚本上面查看机器人登录情况,如图1-8所示。多次执行sh start_bots.sh即可完成压测,每次默认800个机器人登录。
图1-8 查看机器人登录情况
参考资料
kbengine下载参考地址:https://github.com/kbengine/kbengine/releases/tag/v2.5.2
jemalloc下载参考地址:https://github.com/jemalloc/jemalloc/releases
2. 故障排除
问题一:编译过程出现m32问题
现象描述:
编译过程出现m32问题,如图2-1所示。
图2-1 m32 问题
问题二:编译过程出现expat无法识别错误
现象描述:
在编译expat提示当前编译类型无法找到,如图2-2所示。
图2-2 无法识别
可能原因:
自带“config.guess”版本不匹配。
解决方法一:指定平台,手动编译。
cd lib/dependencies/expat/
./configure --build=arm-linux
make
cd -
make -j4
解决方法二:替换expat自带“config.guess”。
cd lib/dependencies/expat/
mv conftools/config.guess conftools/config.guess.bak
cp /usr/share/automake-1.13/config.guess conftools/
cd -
make -j4
说明:如果没有automake请通过yum install automake,本次测试环境使用的是automake-1.13版本。
问题三:编译过程出现log4cxx无法识别错误
现象描述:
在编译log4cxx提示当前编译类型无法找到,如图2-3所示。
图2-3 无法找到编译类型
可能原因:
问题原因同上。
解决方法一:指定平台,手动编译。
cd lib/dependencies/log4cxx/
./configure --build=arm-linux --with-apr=../apr --with-apr-util=../apr-util
make
cd -
make -j4
解决方法二:替换log4cxx自带“config.guess”。
cd lib/dependencies/log4cxx/
mv config.guess config.guess.bak
cp /usr/share/automake-1.13/config.guess .
cd -
make -j4
问题四:汇编代码跨平台支持问题
现象描述:
汇编代码跨平台支持问题,如图2-4显示。
图2-4 跨平台支持问题
可能原因:
由于ARM架构中,没有timestamp_rdtsc函数中使用的寄存器,需修改函数实现。
处理步骤:
将“lib/common/timestamp.h”中的timestamp_rdtsc()函数,替换为如下代码:
inline uint64 timestamp_rdtsc()
{
#if defined(__x86_64__) || defined(__amd64__)
uint32 rethi, retlo;
__asm__ __volatile__(
"rdtsc":
"=d" (rethi),
"=a" (retlo) );
return uint64(rethi) << 32 | retlo
#elif defined(__aarch64__)
int64_t virtual_timer_value;
asm volatile("mrs %0, cntvct_el0" : "=r"(virtual_timer_value));
return virtual_timer_value;
#else
#error "not support"
#endif
}
问题五:jemalloc ARM平台兼容性问题
现象描述:
说明:
kbengine 2.5.2版本已集成jemalloc 5.2.0版本,可跳过此问题。
kbengine内置的jemalloc版本如果低于v5.2.0版本,该版本在ARM运行会出现段错误,如图2-5所示。该问题在jemalloc v5.2.0版本已解决。
图2-5 兼容性问题
可能原因:
本文档采用的是jemalloc 5.2.0版本。
处理步骤:
查看kbengine当前集成的jemalloc 版本号。
vi lib/dependencies/jemalloc/ChangeLog
如果版本号低于5.2.0版本,则下载jemalloc 5.2.0及以上版本,并进行重新编译。
下载jemalloc 5.2.0及以上版本,并进行重新编译。
cd lib/dependencies/
mv lib/dependencies/jemalloc lib/dependencies/jemalloc_back
wget https://github.com/jemalloc/jemalloc/archive/5.2.0.tar.gz
tar xvf 5.2.0.tar.gz
mv jemalloc-5.2.0 jemalloc
cd jemalloc/
autoconf
./configure
make
#重新编译kbengine
cd ../../../
make -j4
问题六:编译过程出现不同平台gcc对char类型默认定义不同的问题
现象描述:
编译过程出现不同平台gcc对char类型默认定义不同的问题,如图2-6所示。
图2-6 默认定义不同
可能原因:
x86上的gcc 把char 定义为signed char;而ARM平台上使用的arm-linux-gcc 却把char 定义为unsigned char。
解决方法:
在编译时加-fsigned-char参数,指定char为signed char。
修改src路径下的“build/common.mak”文件,修改方法如下:
vim build/common.mak
注释一行:
#CXXFLAGS += -Werror
新增一行:
CXXFLAGS += -fsigned-char
make
问题七:编译成功后运行dbmgr进程出连接失败
现象描述:
启动测试程序出现:"InterfacesHandler_Interfaces::reconnect(): couldn't connect to(interfaces server): 127.0.0.1:30099! ",如图2-7所示。
图2-7 连接失败
可能原因:
编译成功后运行dbmgr进程出连接失败。
解决方法:
修改InterfacesHandler_Interfaces::reconnect()函数中select函数的超时设置(函数所在的文件路径为: kbengine-2.5.2/kbe/src/server/dbmgr/interfaces_handler.cpp),修改方法如下:
//struct timeval tv = { 0, 2000000 };//原函数
struct timeval tv = { 2, 0 };//修改后的配置
修改完成后,请重新编译该工程即可,不需要执行make clean。