简介

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”请根据实际情况替换。

192.168.1.237

3306

kbe

password

true

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。

kbengine配置mysql_KBEngine如何配置相关推荐

  1. 主从配置_MySQL主从复制配置详解

    MySQL版本5.5.58 第一步配置主机 主机配置如下: server-id = 1 #服务器id (主从必须不一样) log_bin = mysql-bin #打开日志(主机需要打开), 这个my ...

  2. VS2010非永久性配置和永久配置Opencv

    前面的非永久性配置在很多博客中都已经详细说明,这里就大致说一下. 按照非永久性的步骤配置好之后,就可以在此基础上永久性配置. 1.下载安装OpenCV 下载地址如下:   http://sourcef ...

  3. R语言使用ggplot2包使用geom_violin函数绘制分组小提琴图(分组颜色配置、位置配置)实战

    R语言使用ggplot2包使用geom_violin函数绘制分组小提琴图(分组颜色配置.位置配置)实战 目录

  4. Java注解和xml_Spring注解配置和xml配置优缺点比较

    Spring注解配置和xml配置优缺点比较 编辑 ​ 在昨天发布的文章<spring boot基于注解方式配置datasource>一文中凯哥简单的对xml配置和注解配置进行了比较.然后朋 ...

  5. FPGA的配置引脚以及配置过程

    FPGA配置基本介绍 与CPLD不同,FPGA是基于门阵列方式为用户提供可编程资源的,其内部逻辑结构的形成是由配置数据决定的.FPGA的配置方式分为主动式和被动式. 1配置引脚 FPGA的配置引脚可分 ...

  6. seata-server没有从nacos配置中心读取配置_微服务新秀之Nacos,看了就会,我说的

    再讲 Nacos 之前,我们需要了解什么是 Nacos:Nacos 是阿里的一个开源产品,它是针对微服务架构中的 服务发现.配置管理.服务治理 的综合性解决方案. 官网给出的回答: Nacos 致力于 ...

  7. @bean注解和@component注解的区别_阿里面试题一:spring里面使用xml配置和注解配置区别...

    阿里是众多程序员梦寐以求的地方,今天我们分享阿里的一个真实面试题,看似简单,回答起来确实没有头绪?下面我们分几点给大家说下答案. 适用场景 Xml配置场景: 1.Bean实现类来源于第三方类库,如Da ...

  8. 【Android Gradle 插件】ProductFlavor 配置 ( AppExtension#externalNativeBuild 配置 | cmake 配置 | ndkBuild 配置 )

    文章目录 一.ProductFlavor 配置 1.AppExtension#externalNativeBuild 配置 1.AppExtension#externalNativeBuild 配置 ...

  9. 【Android Gradle 插件】ProductFlavor 配置 ( applicationId 配置 | SdkVersion 相关配置 | version 应用版本配置 )

    文章目录 一.ProductFlavor 配置 1.applicationId 配置 2.minSdkVersion 配置 3.targetSdkVersion 配置 4.versionCode 和 ...

最新文章

  1. 数字图像处理:第十三章 图象复原
  2. Enterprise Library——企业库配置管理应用程序块
  3. netty tcp服务端主动断开客户端_「Netty核心技术」6-ChannelPipeline源码
  4. Linux traceroute路由跟踪
  5. C++ std::swap函数的使用
  6. JVMTM Tool Interface
  7. springboot 添加 jsp支持
  8. C++ 对引用的理解
  9. 一个sql生成hive日期维度表
  10. 关于HTTPS的几个问题
  11. 慎用javascript:void(0) 【转】
  12. ei指什么_SCI、EI、SSCI、CSSCI分别是指什么
  13. MATLAB如何调用百度云文字识别API
  14. 【Oracle】建立关联三个表的视图
  15. 三菱FX系列PLC备份电池电压低报警的处理方法
  16. python中breakpoint_Python3.7 特色(2)-breakpoint 內建除錯
  17. 空间机械臂Matlab/Simulink仿真程序自由漂浮空间机械臂(双臂)轨迹跟踪控制matlab仿真程序
  18. 关于移动端IOS input弹起键盘时,引起高度问题
  19. MIPS、CPI、MFLOPS
  20. C++手敲Roberts_Prewitt_Sobel实现阈值分割

热门文章

  1. jfinal集成redis教程
  2. 怎样让孩子爱上学习--罗胖硬派脱口秀《知识就是力量》
  3. 【C/C++题目】输入三角形ABC的三个角坐标, 输出三角形ABC的面积
  4. agetty --noclear tty1进程不结束导致树莓派ubuntu的cpu占用率高
  5. amazeui时间组件测试
  6. mysql backup文件_mysqlbackup使用
  7. C语言基础知识总结大全(一)
  8. MySQL基础入门到索引优化
  9. linux shell脚本批量添加用户
  10. SECS/GEM:PLC与MES间处理