為專用伺服器匯出¶
若想以獨立伺服器的模式在沒有 GPU 或顯示伺服器的機器上執行專案,則必須要使用伺服器建置版本的 Godot。
支援平台¶
Linux: 下載官方 Linux 伺服器二進位檔 。若要從原始碼編輯二進位檔,請參考 為 X11 進行編譯 (Linux, *BSD) 中的說明。
macOS: 為 macOS 平台從原始碼編譯伺服器二進位檔 。
Windows: 目前還沒有用於 Windows 的專用伺服器建置。可以使用
--no-window
命令行引數來防止 Godot 產生視窗。請注意,即使使用--no-window
命令行引數,在 Windows 上還是必須要有支援 OpenGL。
若專案使用 C#,則必須使用有啟用 Mono 的伺服器二進位檔。
「無周邊」vs「伺服器」二進位檔¶
伺服器下載頁面 提供了兩種二進位檔,這兩種二進位檔有一些不同的地方。
Server (伺服器): 用於在專用伺服器上執行。不包含編輯器的功能,因此比較小,也更最佳化。
Headless (無週邊): 包含編輯器功能的二進位檔,目的是用來匯出專案。該二進位檔 可以 用來執行專用伺服器,但因為檔案比較大,也比較沒最佳化,所以不建議這樣用。
匯出 PCK 檔¶
有兩種方法可以為伺服器匯出專案:
建立 Linux/X11 匯出預設設定,並定義指向伺服器二進位檔的自定 Release 匯出樣板,然後照往常一樣匯出專案即可。
只匯出 PCK 檔,建議從 Linux/X11 匯出預設設定中匯出。
這兩種方法產生的結果都相同。下方說明了 PCK 檔的這個方法。
下載好伺服器二進位檔後,需要匯出包含專案資料的 PCK 檔。建立好匯出預設後,點擊 [匯出] 對話框下方的 [匯出 PCK/ZIP] 並選擇目標路徑。對話框中的 Export With Debug 勾選框不會影響最終的 PCK 檔,可以不動這個選項。
更多資訊請參考 匯出專案 。
備註
若從無周邊 (Headless) 編輯器中匯出專案,請在專案資料夾中使用 --export-pack
選項來呼叫無周邊編輯器以匯出 PCK 檔。
備註
PCK 檔案會包含一些在伺服器上通常不需要的資源,如紋理與聲音檔。這表示,PCK 檔可能比實際可能的大小還要大。從 PCK 檔中將伺服器不需要使用的資源移除的功能已計劃於未來的 Godot 版本中提供。
往好處想,這樣依賴就可以在用戶端與專屬伺服器建置中使用同一個 PCK 檔。這樣也適用於在用戶端與專用伺服器上使用同一個壓縮檔的情況。
準備伺服器發佈¶
下載或編譯伺服器二進位後,應將其放置於與匯出的 PCK 檔相同的資料夾中。伺服器二進位檔的檔名應與 PCK 檔相同 (除了副檔名)。這樣一來 Godot 才能自動偵測要使用的 PCK。若想用以不同名稱的 PCK 檔來啟動伺服器,則可以使用 --main-pack
命令行引數來指定 PCK 檔的路徑:
./godot-server --main-pack my_project.pck
開啟專用伺服器¶
若用戶端與伺服器端都屬於相同的 Godot 專案,則必須要加上能直接以命令行引數來開啟伺服器的方法。可以通過在主要場景 (或單例) 的 _ready()
方法中加上下列程式碼片段來實現:
if "--server" in OS.get_cmdline_args():
# Run your server startup code here...
# Using this check, you can start a dedicated server by running
# a Godot binary (headless or not) with the `--server` command-line argument.
pass
另外,也可以在偵測到無周邊或伺服器二進位檔時開啟專用伺服器:
# Note: Feature tags are case-sensitive! It's "Server", not "server".
if OS.has_feature("Server"):
# Run your server startup code here...
# Note that using this check may break unit testing scripts when
# running them with headless or server binaries.
pass
如果用戶端與伺服器端是分開的兩個 Godot 專案,則伺服器通常應該都設定好會在主要場景開啟時自動執行伺服器。
下一步¶
在 Linux 中,請確保專用伺服器會在當機或系統重開機的時候重新啟動,可以 建立 systemd 服務 (英文) 。這樣也可以更方便地檢視伺服器日誌,並且 systemd 會提供自動日誌切割 (log rotatioin)。
若有 Container 的使用經驗,也可以試試將專屬伺服器包裝在 Docker Container 中。這樣一來要設定自動縮放就更簡單了 (但這不在本教學的討論範圍內)。