一鍵開伺服器其實是最簡單的部分

遊戲伺服器打一行指令就能開起來,所以一開始我以為做個管理面板就是放幾個按鈕而已。結果真的做下去才發現,難的是後面那一堆問題:程序到底還活著沒有、誰可以對它下指令、安裝跑到哪了,還有面板關掉的時候,還在跑的伺服器要怎麼辦。

如果你也想自己做一個遊戲伺服器的管理介面,這幾件事最好一開始就想清楚。

讓畫面不要自己猜狀態

我把系統拆成兩塊:本機的 agent 負責管程序、檔案跟存資料,React 前端只透過 HTTP 跟 WebSocket 去操作明確的東西。這樣畫面上顯示的狀態都是 agent 告訴它的,不會自己去猜伺服器是不是還在跑,前端也碰不到作業系統那些危險的能力。

裝東西很久,就把它當成一個工作

Minecraft 或 SteamCMD 的安裝、更新都不是幾秒就好的事。如果讓 HTTP request 一直等,使用者重新整理頁面進度就不見了,失敗了也很難重試。所以我現在的做法是把每次安裝都當成一個 Job,有自己的編號、階段、進度跟錯誤訊息,前端再去訂閱它的更新。這樣關掉頁面再回來,還是看得到它跑到哪。

在 Windows 上,關程序沒那麼簡單

送一個正常的結束訊號,遊戲程序不一定會乖乖退出。所以程序管理那邊要記住 PID、聽 exit event,真的關不掉的時候還要用 Windows 的程序樹終止把整串子程序一起收掉。這件事我後來是當成設計的一部分在做,不是出問題才補上去的。

現在做到哪

第一階段已經有登入、伺服器的新增修改刪除、開關伺服器,還有即時主控台。接下來在做自動安裝、更新跟背景工作的介面,等這些穩定一點再回來補這篇。