1.本发明涉及计算机技术领域,尤其涉及一种游戏异步解决方法。
背景技术:
2.游戏服务异步处理技术主要解决在大数据大流量情况下前后端交互请求过程中过多的io消耗、复杂的逻辑运算导致游戏卡顿的问题,也就是说客户端给后端发送请求,后端有大量的io、逻辑需要处理完才能返回给客户端,常见的场景为客户端打点数据上报,在数据上报这个期间,请求接口没有返回,客户端就会一直处于loading状态,给玩家的体验就是卡顿的现象。如果应用异步解决方法,上述问题就能大大减少甚至完全避免。
3.因此,现在亟需一种针对游戏业务场景的异步解决方案。
技术实现要素:
4.本发明为解决目前背景技术中存在的缺点,提出了一种游戏异步解决方法,包括定时模块,所述定时模块基于liunx系统crontab功能实现,通过shell脚本配置各种定时任务,能随时动态控制数据的处理速度,所述定时模块能通过简单的配置实现常驻进程和每分钟进程的启动,所述定时模块通过文件锁机制实现进程的保活,通过版本号实现进程自动重启,达到热更新的目的;
5.进一步的,所述方法还增加了队列机制,队列机制基于redis实现,通过php语言作为载体实现逻辑处理,因此需要安装php以及对应的redis扩展,用来解决数据收发的时序问题,客户端产生的消息请求服务器会把它放入消息队列,服务器需要维护一个消息队列,该消息队列通过redis实现,通过redis自身的list结构使得它可以用来做消息队列,它有几个阻塞式的api可以使用,正是这些阻塞式的api让其有能力做消息队列;另外,做消息队列的其他特性fifo(先入先出),需要一个list对象从头取数据,从尾部塞数据;redis能做消息队列还得益于其list对象blpop、brpop接口以及pub/sub(发布/订阅)的某些接口,可以用来做消息队列。
6.进一步的,所述方法还包括生产者消费者模型,保障了数据能别及时消费,客户端通过服务端生产数据,这些数据由另一个模块来负责处理,产生数据的模块就形象的称为生产者,而处理数据的模块就称为消费者,只有生产者和消费者还不够,这个模型还必须要有一个缓冲区处于生产者和消费者之间,作为中介,生产者把数据放入缓冲区,而消费者从缓冲区中取出数据,这个缓冲区就是redis。
7.采用上述技术方案,具有如下有益效果:
8.本发明通过多种技术的融合使游戏客户端在大数据量和高并发请求下实现流畅的游戏体验,一方面,客户端研发人员不需要关注具体实现,另一方面节省了后端服务器成本,可以用更少的服务器实现处理同样并发量的请求。
附图说明
9.图1为本发明的流程图。
具体实施方式
10.以下通过具体较佳实施例对本发明作进一步详细表述,但本发明并不仅限于以下的实施例。
11.实施例1:一种游戏异步解决方法,包括定时模块,所述定时模块基于liunx系统crontab功能实现,通过shell脚本配置各种定时任务,能随时动态控制数据的处理速度,所述定时模块能通过简单的配置实现常驻进程和每分钟进程的启动,所述定时模块通过文件锁机制实现进程的保活,通过版本号实现进程自动重启,达到热更新的目的;
12.所述方法还增加了队列机制,队列机制基于redis实现,通过php语言作为载体实现逻辑处理,因此需要安装php以及对应的redis扩展,用来解决数据收发的时序问题,客户端产生的消息请求服务器会把它放入消息队列,服务器需要维护一个消息队列,该消息队列通过redis实现,通过redis自身的list结构使得它可以用来做消息队列,它有几个阻塞式的api可以使用,正是这些阻塞式的api让其有能力做消息队列;另外,做消息队列的其他特性fifo(先入先出),需要一个list对象从头取数据,从尾部塞数据;redis能做消息队列还得益于其list对象blpop、brpop接口以及pub/sub(发布/订阅)的某些接口,可以用来做消息队列。
13.所述方法还包括生产者消费者模型,保障了数据能别及时消费,客户端通过服务端生产数据,这些数据由另一个模块来负责处理,产生数据的模块就形象的称为生产者,而处理数据的模块就称为消费者,只有生产者和消费者还不够,这个模型还必须要有一个缓冲区处于生产者和消费者之间,作为中介,生产者把数据放入缓冲区,而消费者从缓冲区中取出数据,这个缓冲区就是redis。
14.所述选择生产者消费模型主要解决以下问题:
15.一方面,解耦,假设生产者和消费者是两个类,如果让生产者直接调用消费者的某个模块,那么生产者和消费者之间就会产生依赖(耦合)。如果消费者的代码发生变化可能会影响到生产者。而如果两者都依赖于某个缓冲区,两者之间不直接依赖,耦合性也就降低了。
16.另一方面,支持并发,生产者直接调用消费者的某个方法,还有一个弊端。由于函数调用是同步的(或者称作阻塞的),在消费者的方法没有返回之前,生产者只好一值阻塞,如果消费者处理数据很慢,则生产者就会白白浪费时间。使用生产者和消费者模式之后,生产者和消费者可以是两个独立的并发主体。生产者把制造出来的数据放到缓冲区,就可以继续生产下一个数据,而不必依赖消费者的处理速度了。
17.第三方面,支持忙闲不均,缓冲区还有一个好处就是,如果制造数据的速度时快时慢,缓冲区的好处就体现出来了,当数据制造快的时候,消费者来不及处理,未处理的数据就可存放到缓冲区中。等待生产者的速度慢下来之后,消费者再慢慢处理。
18.本发明对物理服务器配置没有严格的要求,普通的x86机器,安装centos7系统,2核4g内存即可运行,配置越高,系统的吞吐量自然就越大。
19.在进行具体操作中,1、准备一台普通的linux机器,2核4g,安装centos系统,安装
nginx、redis、php、mysql环境,或者直接通过docker一键安装;
20.1)首先安装操作系统基础环境,具体命令如下:yum install
‑
y gcc
‑
c zlib zlib
‑
devel openssl openssl
‑‑
devel pcre pcre
‑
devel;
21.2)安装ngixn软件,可以选择编译安装也可以选择yum安装,这里选择编译安装,具体操作如下:
[0022][0023]
3)加下来安装php,同样也分为编译安装和yum安装,同样这里我们选用编译安装:
[0024]
·
用wget下载php的tar.gz文件:wget http://br2.php.net/get/php
‑
7.2.2.tar.gz
[0025]
·
解压tar.gz文件:tar zxvf php
‑
7.2.2.tar.gz
[0026]
·
新建待会要安装php的文件夹:mkdir/usr/local/php,然后进入解压后的php安装包文件夹里,配置configure:./configure
‑‑
prefix=/usr/local/php
‑‑
with
‑
curl=/usr/local/curl
‑‑
with
‑
freetype
‑
dir
‑‑
with
‑
gd
‑‑
with
‑
gettext
‑‑
with
‑
iconv
‑
dir
‑‑
with
‑
kerberos
‑‑
with
‑
libdir=lib64
‑‑
with
‑
libxml
‑
dir
‑‑
with
‑
mysqli
‑‑
with
‑
openssl
‑‑
with
‑
pcre
‑
regex
‑‑
with
‑
pdo
‑
mysql
‑‑
with
‑
pdo
‑
sqlite
‑‑
with
‑
pear
‑‑
with
‑
png
‑
dir
‑‑
with
‑
xmlrpc
‑‑
with
‑
xsl
‑‑
with
‑
zlib
‑‑
enable
‑
fpm
‑‑
enable
‑
bcmath
‑‑
enable
‑
libxml
‑‑
enable
‑
inline
‑
optimization
‑‑
enable
‑
mbregex
‑‑
enable
‑
mbstring
‑‑
enable
‑
opcache
‑‑
enable
‑
pcntl
‑‑
enable
‑
shmop
‑‑
enable
‑
soap
‑‑
enable
‑
sockets
‑‑
enable
‑
sysvsem
‑‑
enable
‑
xml
‑‑
enable
‑
zip
[0027]
·
配置php相关文件:1、配置php.ini,这是php的配置文件:cp/home/myload/php
‑
7.2.2/php.ini
‑
development/usr/local/php/lib/php.ini
[0028]
2、配置php
‑
fpm.conf,这是php
‑
fpm配置文件:cp/usr/local/php/etc/php
‑
fpm.conf.default/usr/local/php/etc/php
‑
fpm.conf
[0029]
3、配置www.conf,配置用户的文件:cp etc/php
‑
fpm.d/www.conf.default etc/php
‑
fpm.d/www.conf
[0030]
4、将php
‑
fpm启动文件复制到init.d文件夹中一份方便启动php:cp
‑
r sbin/php
‑
fpm/etc/init.d/php
‑
fpm
[0031]
4)同样php的redis扩展我们也使用编译安装:
[0032]
·
下载php所需的模块owlient
‑
phpredis
‑
90ecd17.tar.gz
[0033]
·
tar
‑
zxvf owlient
‑
phpredis
‑
2.1.1
‑1‑
g90ecd17.tar.gz
[0034]
·
cd owlient
‑
phpredis
‑
90ecd17
[0035]
·
/usr/local/php/bin/phpize
[0036]
·
../configure—with
‑
php
‑
config=/usr/local/php/bin/php
‑
config
[0037]
·
make&&make install
[0038]
·
配置php.ini,extension=redis.so
[0039]
·
重启php即可
[0040]
5)配置定时任务,执行命令:crontab
‑
e,编辑定时任务的配置:
[0041]
1)*/1****/bin/sh/data/www/crontab/crontab.sh.php>/dev/null 2>&1&
[0042]
2)加入crontab.sh.php文件放在/data/www/crontab/目录下面,每分钟都会进行一次检测,如果进程存在则不处理,如果进程不存在则主动拉起进程,确保进程一直在消费redis队列里面的数据;
[0043]
2、使用postman软件模拟客户端请求,设置1000的并发重复100次请求;
[0044]
1)在使用模拟请求的时候需要注意的是:要保证当前网络的稳定性和一致性,通常情况下我们可以使用内网进行测试。
[0045]
3、这里分两种情况以便做对比,第一种情况不启用异步系统,另一种是启用异步系统,我们对比整个请求所需要的时间,时间越长说明客户端越卡顿,时间越短说明客户端越流畅;
[0046]
1)每一轮测试完成之后要对异步系统进行重启,避免因为数据等缓冲影响测试结果。
[0047]
4、设置每次收到一次客户端请求去数据库写一条数据,最后看在相同时间内哪种情况写入的数据多就表明哪种方式效率更高。
[0048]
1)每一轮测试完成之后把上一次写入的数据应该清空,避免因为数据表大小不一致影响测试结果。
[0049]
5、两种方式分别进行100次测试,去掉其中耗时最长的和耗时最短的再取平均值,结果发现在同等网络条件下,同样的机器配置下,使用异步方法和系统的比没有使用异步和系统速度快89倍左右。
[0050]
最后应说明的是:该异步解决方法和系统在一定的业务场景下,比如数据上报等场景能大幅度提高系统的吞吐量,保障客户端游戏体验。
[0051]
本发明通过多种技术的融合使游戏客户端在大数据量和高并发请求下实现流畅的游戏体验,一方面,客户端研发人员不需要关注具体实现,另一方面节省了后端服务器成本,可以用更少的服务器实现处理同样并发量的请求。
[0052]
以上描述了本发明的基本原理和主要特征,本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内,发明要求保护范围由所附的权利要求书及其等效物界定。
再多了解一些
本文用于企业家、创业者技术爱好者查询,结果仅供参考。