平安夜,我們來聊聊遊戲伺服器的搭建吧

2021-02-16 ZERO開發
前言:

        項目是一個遊客登錄型的棋牌聯網遊戲,前端是白鷺引擎,後端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等地址。

相關焦點

  • 【專業技術】如何搭建遊戲伺服器?
    存在問題:手遊越來越火了,聽聽業內人士的分析,他山之石,多多借鑑,那麼手遊的伺服器到底如何搭建的
  • 平安夜,讓我們來搞點小事情.
    PAPU PLAYER一種類似於會員卡的體系,但是我們不喜歡叫他會員卡。關於線上的功能我們會在平安夜給大家講述,推送也會同時推送出來,並且會有一些優惠活動。線下,我們推出了什麼?來PAPU裡不光光是喝酒聊天,從現在開始,你可以喊上幾個朋友,來PAPU玩兒會兒桌遊。
  • 哪些業務可以租用香港伺服器來搭建?
    現在除了大陸地區伺服器之外,也有不少企業租用海外伺服器,像現在比較火熱的香港伺服器,也備受企業喜愛,香港機房的地理位置距離大陸地區比較近,在網絡條件方面相比其他的海外伺服器更加有優勢,那麼香港伺服器都適合哪些行業租用呢?哪些業務可以租用香港伺服器來搭建呢?
  • 走進微認證 | 搭建我的世界遊戲伺服器 讓遊戲更high
    當「吃雞」成為年輕人社交的主題詞,「榮耀」成為學生的日常語,我們可以看到,網遊影響並改變著我們的娛樂和社交方式。你知道為何現在遊戲體驗在日益提升嗎?你想提高自己的遊戲部署能力嗎?華為雲微認證「搭建我的世界遊戲伺服器」將解答你的疑問。
  • 深圳艾維平安夜活動圓滿落幕
    今年的平安夜,我們的行政小姐姐耗時一周為同事們精心準備了一場別開盛宴的Party。在此小編向你致敬,Salute啊!讓我們一起回顧下都有哪些驚喜吧~第一件驚喜,聖誕主題下午茶每周四是艾維一貫的下午茶時間,只是今天的別樣不同,聖誕樹、小麋鹿
  • 你有一份平安夜活動攻略,請及時查收!
    本作中的平安夜活動和以前的作品都略微不同哦,而且鈴鈴鹿也給我們留下了一個小彩蛋!!
  • 如何搭建「我的世界」伺服器 | Linux 中國
    我們將通過一個一步步的、新手友好的教程來向你展示如何搭建一個「我的世界(Minecraft)」伺服器。這將會是一個長期的多人遊戲伺服器,你可以與來自世界各地的朋友們一起玩,而不用在同一個區域網下。遊戲伺服器通常容易被 DDoS 攻擊,而你的家庭網絡設置通常不夠安全,來抵擋它們。很可能連小型攻擊都無法阻擋。◈ 你得處理埠轉發。如果你試著在家庭網絡中搭建「我的世界」伺服器的話,你肯定會偶然發現埠轉發的問題,並且處理時可能會有問題。◈ 你得保持你的電腦一直開著。你的電費將會突破天際,並且你會增加不必要的硬體負載。大部分伺服器硬體都是企業級的,提升了穩定性和持久性,專門設計用來處理負載。
  • 網站本地伺服器搭建
    網站搭建第一步本地伺服器的架設,對於剛接觸網站編程的小夥伴不要先急著去購買伺服器,當然土豪請隨意。
  • FTP伺服器的搭建
    FTP伺服器是在網際網路上提供文件存儲和訪問服務的計算機,我們可以上傳文件到伺服器供其他人拷貝,它們依照FTP協議提供服務。 FTP是File Transfer Protocol(文件傳輸協議)。顧名思義,就是專門用來傳輸文件的協議。簡單地說,支持FTP協議的伺服器就是FTP伺服器。        FTP伺服器的搭建有很多方式。
  • 平安夜沒什麼可送的,送份安利吧!猛男必玩新款就是它?
    這很可以今晚為各位觀眾姥爺安利一款猛男必玩的新手遊吧!——主打BJD題材!超寫實手機養成!各種型號!各種服裝!由bilibili獨家代理的手遊《代號:Project Doll》它來啦——!並且絕不咕咕,這次一定!首測招募現已開啟,前往官網填寫問卷就能報名!
  • 搭建伺服器算什麼困難?
    如果你還對如何CSGO搭建伺服器存在著疑惑?那麼點開這篇文章的選擇是對的。
  • 網站伺服器的搭建(上)
    網站伺服器的搭建1.
  • 從零搭建遊戲伺服器,攏共分幾步?
    一般建議採用MongoDB作為遊戲資料庫,因為在遊戲開發過程中用到的數據結構用的最多的就是dict類型,跟MongoDB的數據結構(採用的是BSON )類似。而且版本交替的過程中,不像SQL一樣需要去修改表結構。用作為內存資料庫,實際開發過程中都是結合MySQL來使用的比較多。除了上面介紹的這些資料庫,還需要了解下內存緩存(也有稱為內存資料庫的)這個概念。
  • 平安夜微信祝福語大全暖心2019 平安夜溫暖祝福送給大家
    點上面藍色字關注,每天免費收祝福  1.平安夜和聖誕節2.平安夜的狂歡意猶未盡,聖誕鐘聲已敲響,劃破清晨的寧靜,歡樂蕩漾著四方,火紅而潔白的聖誕,令人悠然神往。火紅奉獻真心,潔白飄落吉祥!聖誕快樂!4.我手託彎月,頭頂繁星,眼含秋波,口銜玫瑰,腳踏祥雲,以迅雷不及掩耳盜鈴兒響叮噹之勢飛到你的面前,只是為了給你送上聖誕禮物,祝你聖誕快樂。
  • 我們來聊聊圖靈測試
    這裡是公園的新欄目——《完全極客養成指南》,我們會圍繞泛科技內容展開,每次可能會推薦一本書、一部電影甚至是一款遊戲,而目的只有一個——將還不夠極客的你打造成具有「好奇之心與改變之力」的極客。《完全極客養成指南》將在每周六與您見面。
  • Windows下的git伺服器搭建
    前兩個月領導花巨資申請了一個伺服器,讓我搞git伺服器來管理代碼,花了幾天時間伺服器搭建好了。但是這個博客因為種種原因拖到了現在,其實之前在某個破舊的伺服器上搭建過Ubuntu下的git伺服器,但是領導不喜歡Linux作業系統讓我在Windows下搞,沒得法只能照辦。(後續應該會更新Ubuntu下搭建git伺服器的博客吧) 花絮結束,接下來是正文。
  • 平安夜英文怎麼說?
    在英國,平安夜如在工作日,有時會被銀行及貿易公司視為短日(下午休息)。2.The Catholic Christmas season begins in Christmas eve. Unless it was Sunday. A party is said to be in the morning of December 24th.
  • 怎麼搭建自己的Blynk物聯網伺服器
    但是總結起來,這些平臺用的是別人搭建好的伺服器。今天就跟大家分享一個開源的物聯網平臺,可以利用開原始碼來搭建自己的伺服器。簡單介紹一下Blynk:Blynk是一個物聯網平臺,旨在簡化物聯網的移動和Web應用程式的構建。輕鬆連接400多種硬體型號,如Arduino,ESP8266,ESP32,Raspberry Pi和類似的MCU,並在5分鐘內為iOS和Android拖放IOT行動應用程式。
  • 乾貨|聖誕平安夜精準微信營銷案例!
    每年的12月24日晚是西方的平安夜,是家人團聚的日子。而在中國,相互送蘋果成為平安夜的一大特色。那麼,平安夜為什麼要送蘋果呢?
  • 平安夜,這樣的蘋果你一定沒送過
    一個誘惑了夏娃,一個砸醒了牛頓;一個成了手機平拍,一個主宰了廣場舞;平安夜送什麼,富貴平安黃金樟蘋果來報導!——傳說中的土豪金蘋果7平安夜再不送你就out了!!!在平安夜來臨之際,不要再問:XX你喜歡什麼??平安夜送什麼??