前言
我的项目是一个游客登录型的棋牌联网游戏,前端是白鹭引擎,后端PHP开发。分为登录和获取根本信息的Http层和websocket通信的游戏层。后盾须要有一个分布式网关服务器(php游戏网关)。以下为了搭建更快捷,应用宝塔进行操作,前提曾经通过宝塔装置结束了LNMP。
步骤
下载完源码地址的源码,解压失去以下四个目录,别离的用处见标注。
2. EgretWing工具导入client中的代码,web整个文件夹的代码放入服务器(我是本地应用VM搭的centOS虚拟机)。3. 宝塔中的应用的PHP装置yaf扩大,重启PHP后拜访查看phpinfo()可能找不到yaf
4. 通过宝塔的创立网站增加web中的代码,使得能通过域名申请到web目录下的api.php就行。次要是三个接口,别离返回登录信息,websocket的地址和端口,图片代理等。
- 代码client文件中的代码批改”src/scene/Login.ts”的onLoginTouch办法中申请网络接口为下面web中配置的域名,”src/Main.ts”中的initGame办法同样批改网络申请地址为下面web配置的域名。接口别离是昵称和登录token,另一个是websocket地址和端口。
- 下载下面的Fooking的源代码,并将代码放入服务器中,目录构造如下。
7. 关上服务器命令面板,cd进入fooking目录(以我的为例,名字能够自定义)。而后make进行编译。Src目录中多出后缀为0的文件,面板也会显示编译完结。
8. 关上fooking目录下的router.lua文件。PROT能够自行定义,确定下了这个端口,我的是8015。就须要在centOS防火墙中对其放行,宝塔是间接点击平安增加8015进行放行。
9. 仍然是同级目录,关上config.lua文件,端口就是游戏中webscket进行连贯的端口。次要配置的有路由服务器地址(下面router设置的端口和地址),后端服务器列表的“BACKEND_SERVER”,以及fastcgi params,配置标注如下。
--监听IP和端口HOST = "0.0.0.0";PORT = 9005;--守护进行--DAEMONIZE = 1;--日志文件(为空则不输入日志, stdout-输入到规范输入上, 其它则按文件解决)LOG_FILE = "stdout";--间接屏幕打印--LOG_FILE = "/tmp/fooking-gateway.log";--输入到文件--1: 仅error--2: error与info--3: 所有LOG_LEVEL = 3;--是否路由服务器(0-否, 1-是)--如果是路由,ROUTER以下的配置将被疏忽)ROUTER = 0;--服务器IDSERVER_ID = 1;--工作过程WORKER_NUM = 2;--最大连接数MAX_CLIENT_NUM = 10000;--缓冲区大小MAX_BUFF_SIZE = 4096;--路由服务器ROUTER_HOST = "192.168.234.128";ROUTER_PORT = 8015;--SSL配置--SSL = 1--SSL_CERT = "/tmp/cert.pem"--SSL_PKEY = "/tmp/pkey.pem"--指定工夫内连贯没有数据包申请,将会踢掉连贯(单位秒),为0不解决IDLE_TIME = 0;--脚本SCRIPT_FILE = "../scripts/Websocket.lua";--后端服务器列表BACKEND_CONNECT_TIMEOUT = 5;--连贯超时工夫(单位秒)BACKEND_READ_TIMEOUT = 10;--数据接管超工夫(单位秒)BACKEND_KEEPALIVE = 10;--最大维持长连贯数量BACKEND_SERVER = { ["unix:/tmp/php-cgi-73.sock"] = 5,--第一列是socket选项,第二列是权重(跟nginx的upstream差不多一个意思)};--新连贯是否告诉(0-不告诉, 1-告诉)--申请头会有EVENT=1EVENT_CONNECT = 0;--敞开连贯是否告诉(0-不告诉, 1-告诉)--申请头会有EVENT=2EVENT_CLOSE = 1;--fastcgi paramsFASTCGI_PREFIX = "";--go下要应用HTTP_作为前缀,否则拿不了SESSIONID和EVENTFASTCGI_ROOT = "/www/wwwroot/san_zhang_pai/server/";--必须以/结尾FASTCGI_FILE = "server.php";FASTCGI_PARAMS = { ["SERVER_SOFTWARE"] = "fooking", ["SERVER_PROTOCOL"] = "HTTP/1.1", ["GATEWAY_INTERFACE"] = "CGI/1.1", ["REQUEST_METHOD"] = "POST", ["SCRIPT_FILENAME"] = FASTCGI_ROOT..FASTCGI_FILE, ["SCRIPT_NAME"] = FASTCGI_FILE, ["DOCUMENT_ROOT"] = FASTCGI_ROOT, ["SERVER_NAME"] = "server.yafgame.com/", ["QUERY_STRING"] = "a=10&b=20",};
- 启动router.lua。 Cd src,而后./fooking ../router.lua
- 查看php-fpm配置文件办法,命令输出, ps -ef | grep fpm。能够看到php-fpm的配置文件。
- 找到并关上php-fpm.conf文件,能够看到监听的通信办法以及通信的具体地址,还有fpm的谬误日志寄存地址。宝塔Nginx与fpm默认是以unix socket办法,如果fpm批改成了tcp,那nginx也要批改。
13. 查看fpm.conf后与fooking的config设置结束后,就能够开始启动config了。Cd fooking, 而后./fooking ../config.lua。
如果呈现Can't found available backend server, Please check BACKEND_SERVER,多是因为config的后端配置填的通信形式与fpm的不统一。其余的就是FASTCGI_ROOT没填对地址。
14. 最初关上EgretWing导入的client中的源码,点击调试,弹出游戏界面,登录后失常的话就会进入游戏界面了。
Fooking分布式游戏服务器网关结构图--
- 启动的config.lua呈现“stream_socket_client(): unable to connect to tcp://127.0.0.1:9010”时,批改server的“config”中的router,IP和端口换成router.lua中配置启动的地址和端口。
- 批改server的redis中的为本人装置的地址和端口,web的api/api/api/include/config.inc.php,批改redis地址和微信公众号APPID等地址。