华为云计算 云知识 KBEngine如何配置
KBEngine如何配置

简介

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。

上一篇:OBS对象存储服务多少钱 下一篇:NVR800人员运动路径追踪配置