項目是一個遊客登錄型的棋牌聯網遊戲,前端是白鷺引擎,後端PHP開發。分為登錄和獲取基本信息的Http層和websocket通信的遊戲層。後臺需要有一個分布式網關伺服器(php遊戲網關)。以下為了搭建更快捷,使用寶塔進行操作,前提已經通過寶塔安裝完畢了LNMP。
資源:源碼地址:https://gitee.com/scgywx/threecard
作者: https://my.oschina.net/scgywx/blog/757726
Fooking地址: https://gitee.com/scgywx/fooking
環境:CentOS7
PHP7.3,至少要大於5
寶塔
Nginx
步驟:下載完源碼地址的源碼,解壓得到以下四個目錄,分別的用途見標註。
2. EgretWing工具導入client中的代碼,web整個文件夾的代碼放入伺服器(我是本地使用VM搭的centOS虛擬機)。
3. 寶塔中的使用的PHP安裝yaf擴展,重啟PHP後訪問查看phpinfo()可能找不到yaf
4. 通過寶塔的創建網站添加web中的代碼,使得能通過域名請求到web目錄下的api.php就行。主要是三個接口,分別返回登錄信息,websocket的地址和埠,圖片代理等。
5. 代碼client文件中的代碼修改」src/scene/Login.ts」的onLoginTouch方法中請求網絡接口為上面web中配置的域名,」src/Main.ts」中的initGame方法同樣修改網絡請求地址為上面web配置的域名。接口分別是暱稱和登錄token,另一個是websocket地址和埠。
6. 下載上面的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;
--伺服器ID
SERVER_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=1
EVENT_CONNECT = 0;
--關閉連接是否通知(0-不通知, 1-通知)
--請求頭會有EVENT=2
EVENT_CLOSE = 1;
--fastcgi params
FASTCGI_PREFIX = "";--go下要使用HTTP_作為前綴,否則拿不了SESSIONID和EVENT
FASTCGI_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",
};
10. 啟動router.lua。Cd src,然後./fooking ../router.lua
11. 查看php-fpm配置文件方法,命令輸入, ps -ef | grep fpm。可以看到php-fpm的配置文件。
12. 找到並打開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分布式遊戲伺服器網關結構圖--
15. 啟動的config.lua出現「stream_socket_client(): unable to connect to tcp://127.0.0.1:9010」時,修改server的「config」中的router,IP和埠換成router.lua中配置啟動的地址和埠。
16. 修改server的redis中的為自己安裝的地址和埠,web的api/api/api/include/config.inc.php,修改redis地址和微信公眾號APPID等地址。