首页 > 技术文章 > 填大坑游戏后端托管功能实现

ynhi 2018-11-18 21:08 原文

开发问题:

出现core,释放内存位置,检查了相关的代码,一个定时器初始化了两次,尴尬

还有一个坑,就是timer的描述符有问题,应该是public,如果是private的,在其他位置调用也会出问题。

 

 开发的时候有一个逻辑问题,客户端的数据是通过大厅转发给游戏服务器的,这样的话心跳包在大厅才有,客户端的心跳包逻辑是无效代码,解决的方式有两种:1、修改大厅代码,透传心跳包 2、客户端直连游戏服务器,这里由于工期问题,暂时采用了方式2。在构造数据包的时候浪费了比较久的时间,提取的数据包一直是无效的,这块需要细心处理数据包新增字段和长度,以及游戏服务器的相关业务代码的改动,游戏服务器解析心跳包的时候没有大厅那种映射关系,uid是写在数据包中的,不能通过session查找用户实例,调用server的一个方法通过uid拿到table实例。

其他的就是分析业务逻辑找到 准备事件、开始事件、弃牌、下注事件、游戏当前操作者,桌子状态、用户状态的对应关系。

启用了一个1s计时器,用于判断是否托管,已经处理相应逻辑,好处是,不需要再数据包接受状态机中做改动,缺点是用户越多消耗的定时器资源越多。。

 

编译问题:

ACE编译参考 https://blog.csdn.net/sunny_ss12/article/details/52099427

non-trivially-copyable type错误:打印string需要转换为c格式字符串 .c_str()

提示mysql库找不到,修改Makefile 替换为实际mysql位置 即为:

mysql = /home/tools/mysql
#mysql = /usr/local/mysql
LIBS= -lz -lm -L/usr/local/lib/ -L$(mysql)/lib/mysql $(mysql)/lib/mysql/libmysqlclient_r.a -lACE ../hiredis-master/libhiredis.a
CCFLAGS = -g -I./ -I../Json -I../GameLib -I../hiredis-master -I../hiredis-master/adapters -I$(mysql)/include/mysql -fpermissive

部署问题:

当前运行:./TiandakengGroup -p 23258 -s 5609 -l 815 -d -v 1 -m 1 -t 1

是由start.sh启动的,  启动后报错:./TiandakengGroup: error while loading shared libraries: libACE.so.6.5.2: cannot open shared object file: No such file or directory

参考:https://blog.csdn.net/sean_xyz/article/details/55252229  增加ACE路径

部署命令:结束游戏进程     cd /home/serverBuildDirect/Tiandakeng/Game && make && cp /home/serverBuildDirect/Tiandakeng/Game/Tiandakeng /home/majiang_xianlaiyouxi/game/TianDaKeng/bin/TiandakengGroup  &&  sh /home/majiang_xianlaiyouxi/game/TianDaKeng/bin/start.sh 

 可以qq群交流:623607229

推荐阅读