要讓像《吃不到我呀》這類 H5 遊戲穩定上線,Linux 遊戲服務端不能只理解成「租一台主機、把檔案丟上去」。真正影響玩家體驗的,往往是連線延遲、房間狀態同步,以及高峰期突然湧入的人數。小型休閒遊戲起步時不用搞得太重,但架構方向最好一開始就選對。
Linux 遊戲服務端的基本組成
前端 H5 遊戲通常部署在 CDN 或 Nginx,由瀏覽器下載圖片、JS 與音效資源;真正的遊戲服務端則負責登入驗證、玩家資料、排行榜、關卡進度,以及多人玩法中的即時通訊。
常見組合是 Ubuntu 22.04 LTS、Nginx、Node.js 或 Go,再搭配 MySQL 與 Redis。Node.js 適合 Socket.IO、WebSocket 這類即時互動;若房間數與同時在線玩家逐漸增加,Go 的記憶體控制與併發表現通常更穩。這不是絕對,不過以開發效率來說,H5 團隊用 Node.js 起步很常見。
從部署到連線測試
伺服器建立後,先設定防火牆,只開放必要的 22、80、443,以及遊戲 WebSocket 使用的連接埠。SSH 不建議長期使用密碼登入,改用金鑰並停用 root 遠端登入,少掉不少麻煩。
遊戲 API 可交給 Nginx 反向代理,WebSocket 必須正確轉送 Upgrade 與 Connection 標頭;否則本機測試沒事,玩家一進正式站就會出現「連線中斷」。HTTPS 也不能省,現在多數瀏覽器對非加密頁面愈來愈不友善,尤其涉及登入、支付或廣告 SDK 時。
房間同步別直接相信客戶端
以 4 人即時闖關為例,玩家端只應送出「移動、使用技能、選擇關卡」等操作指令,碰撞判定、分數與通關結果應由 Linux 遊戲服務端裁決。若分數完全由前端回傳,修改瀏覽器資料就能刷榜,這種漏洞其實比想像中常見。
實務上可把 Redis 用於房間狀態與短期快取,MySQL 儲存帳號、道具和歷史戰績。單台 2 核心、4GB 記憶體的雲端主機,在玩法不複雜、每秒同步約 10 至 15 次的情況下,支撐數百名在線玩家通常夠用;但圖片與關卡資源務必走 CDN,別讓遊戲伺服器同時扛靜態流量。
上線後更該盯緊的數字
至少監控 CPU、記憶體、網路延遲、WebSocket 在線數與錯誤日誌。當平均回應超過 200ms,或房間斷線率突然升高,玩家很快就會感覺到卡頓。穩定的 Linux 遊戲服務端不在於堆多少技術名詞,而是能在玩家湧進來時,依然讓每一局正常開始、正常結束。

評論(14)
聽起來把防火牆只開必要埠真的省事,之前我也搞過 SSH 金鑰設定,差點把自己鎖在外面。
如果玩家同時上線幾百人,WebSocket 真的能保持低延遲嗎?
我之前用 Node.js 搭配 Socket.IO,開發速度很快,但遇到高併發時就卡住了。
Redis 放房間狀態倒是好主意,避免頻繁寫 DB。
成本考量上,單台 2 核 4GB 的雲主機真的足夠嗎?
HTTPS 不省真的讓人頭疼,尤其要自行配置證書。
有沒有推薦的監控工具可以即時抓到 WebSocket 斷線?
玩過《吃不到我呀》時,真的感受到斷線後的卡頓,很怕掉線。
如果要支援更多玩家,升級到多台伺服器的方案要怎麼規劃?
Node.js 跟 Go 的選擇,我比較偏好 Go 的記憶體管理。
房間同步不信任客戶端的想法很好,免得被刷榜。
CDN 真的能減輕主機負擔,我之前的遊戲就是靠 CDN 才不卡。
防火牆只開 22、80、443,還要額外開 WebSocket 埠,設定起來有點複雜。
希望未來能看到實作範例,從零部署到上線的完整流程。