> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 使用 LocalMultiplayerAgent 對處理序型遊戲伺服器進行偵錯

> 包裝您現有的伺服器，並在處理序 (非容器) 模式下以 LocalMultiplayerAgent 執行，以在本機對 PlayFab 多人遊戲伺服器進行偵錯。

# 如何以處理序模式使用 LocalMultiplayerAgent 執行遊戲伺服器

本教學課程說明如何：

* 使用 Wrapper 範例建立組建
* 設定 MultiplayerSettings.json
* 執行 LocalMultiplayerAgent
* 測試遊戲連線

## 建立遊戲組建

若要使用 LocalMultiplayerAgent (LMA) 測試遊戲伺服器，您需要建立遊戲組建並將其儲存為封存格式。
為了讓您更輕鬆，我們提供了 Wrapper 範例以及指示和 PowerShell 指令碼。

接著，請依照「[使用 wrapper 應用程式包裝現有的遊戲伺服器](https://github.com/PlayFab/MpsSamples/tree/main/wrappingGsdk#wrapping-an-existing-game-server-using-the-wrapper-app)」步驟，為本教學課程準備好您的遊戲伺服器。

## 設定 MultiplayerSettings.json

瀏覽至您解壓縮 LMA 工具組的資料夾，然後開啟 MultiplayerSettings.json 檔案。此檔案是一個組建設定模擬檔案，用來模擬 MPS 上的組建。

您可以使用 [LMA MultiplayerSettings.json 產生器](https://github.com/PlayFab/MpsAgent/tree/main/LocalMultiplayerAgent/SettingsJsonGenerator)填入 json。
產生器是一個簡單的網頁，會根據您的選項建立 json。您可以在 LMA 的解壓縮資料夾下找到產生器。

以下是 Wrapper 範例以處理序模式執行 LMA 的 MultiplayerSettings.json 範例。

```json theme={null}
{
  "RunContainer": false, // Set RunContainer to false if you are running LMA in Process mode.
  "OutputFolder": "C:\\output\\WindowProcess", // Path where config files and logs will be generated from LMA at each run
  "NumHeartBeatsForActivateResponse": 10, // default value
  "NumHeartBeatsForTerminateResponse": 60, // default value
  //the server will run in stand-by mode for 10 heartbeats and stay in active state for 35 heartbeats.
  "TitleId": "59F84", // default value
  "BuildId": "8624d52e-87a1-4a12-b7f6-b92720ef8919", // default value
  "Region": "EastUs", // default value
  "AgentListeningPort": 56001, // default value
  "AssetDetails": [
    {
      "MountPath": "",  // Mount Path is only required for Container mode. leave it as blank.
      "SasTokens": null,
      "LocalFilePath": "D:\\gameassets.zip" // where your game server is located as an archive format.
    }
  ],
  "ProcessStartParameters": {
    "StartGameCommand": "wrapper.exe -g fakegame.exe arg1 arg2" 
    // shell command to run Wrapper. Command will be executed where game asset is extracted.
    // Make sure the StartGameCommand provided above is an example of the Wrapper sample. 
  },
  "PortMappingsList": [
    [
      {
        "NodePort": 56100, // default value
        "GamePort": {
          "Name": "game_port",
           // Port name is already defined in the Wrapper sample. Wrapper will grab the port information using game_port via GSDK while it's running.
          "Protocol": "TCP"
        }
      }
    ]
  ],
}

```

請務必在 MultiplayerSettings.json 中正確更新下列欄位，以處理序模式執行 LMA。

* `LocalFilePath` - 先前建立之遊戲伺服器資產 zip 檔案的完整本機路徑 (在您的工作站上)，例如：D:\MyAmazingGame\asset.zip (請注意，反斜線需要針對 JSON 格式進行逸出)。

* `StartGameCommand` - 處理序的 StartGameCommand 路徑是相對路徑。工作目錄將是遊戲資產解壓縮的位置。

* `PortMappingsList` - 這些是遊戲在執行時可用的連接埠。
  * `NodePort` 是在您的工作站上開啟的連接埠

  * 處理序模式不需要 `GamePort.Number`。遊戲伺服器執行時，連接埠號碼會透過 GSDK 繫結至 Node Port。在實際案例中，MPS 會為每個處理序型遊戲工作階段動態繫結連接埠。

  * 將 `GamePort.Name` 設定為與遊戲伺服器中定義的相同值。您可以在執行階段檢查 GSDK 設定中索引鍵 GamePort.Name 的值。如果您使用的是 Wrapper 範例，連接埠名稱已定義為 "game\_port"，因此您應在此處設定相同的值。

  * `GamePort.Protocol` - 指定通訊協定類型：TCP 或 UDP

* `OutputFolder` - 產生輸出和設定檔之磁碟機或資料夾的路徑。由於遊戲伺服器將解壓縮至此路徑下，請確定有足夠的可用空間。如果未指定，則會使用代理程式資料夾。

* `AgentListeningPort` - 這是 LMA 與遊戲伺服器通訊的連接埠。任何開放的連接埠都可以使用，預設值為 56001。如果您有其他處理序繫結至 56001，則必須變更此值或終止連接埠 56001 上的其他處理序。

* `ResourceLimits` - 處理序模式不需要。

* `MountPath` - 處理序模式不需要。

* `SessionCookie` (選用) - 作為 RequestMultiplayerServer API 呼叫的一部分傳遞給遊戲伺服器的任何工作階段 Cookie。在 MPS 上的實際案例中，建立連線後，伺服器會通知用戶端從 SessionCookie 載入對應的資源。

## 執行 LocalMultiplayerAgent

現在您已準備好執行 LocalMultiplayerAgent。

* 在 PowerShell 視窗中：\
  瀏覽至 LMA 下包含 LocalMultiplayerAgent.exe 的目錄。

* 執行 `LocalMultiplayerAgent.exe`。
  此時，LMA 會設定 http 接聽程式、解壓縮遊戲資產，並在個別的處理序中啟動遊戲伺服器。

  > 如果您以處理序的形式執行遊戲伺服器，Windows 防火牆可能會跳出視窗，詢問您是否要允許流向您所指定之 NodePort 的流量。如果您想避免這種情況，可以以系統管理員模式執行 LocalMultiplayerAgent，或在防火牆中啟用該連接埠。

LMA 會等待與遊戲伺服器整合之 GSDK 的活動訊號。
如果 GSDK 整合正確，LMA 會依下列順序列印輸出：

1. `CurrentGameState - Initializing`\
   (如果您的遊戲伺服器直接呼叫 GSDK::ReadyForPlayers 而未呼叫 GSDK::Start，則可能不會顯示此項)
2. `CurrentGameState - StandingBy`
3. `CurrentGameState - Active`
4. `CurrentGameState - Terminating`

若要深入了解遊戲伺服器的狀態，請參閱 [PlayFab 多人遊戲伺服器的遊戲伺服器生命週期是什麼](/zh-TW/services/playfab/multiplayer/servers/multiplayer-game-server-lifecycle)。

如果關閉回呼設定正確，您的遊戲伺服器會在狀態設定為終止後很快結束。
請務必確認遊戲伺服器會結束，以避免在 PlayFab 平台上發生非正常關閉。

LMA 也應隨遊戲一起終止。

## 測試與遊戲的連線

一旦 LMA 列印 **CurrentGameState - Active**，您就可以使用 IP 位址 127.0.0.1 和遊戲伺服器所接聽的 NodePort 連接埠連線至遊戲伺服器。

如果您使用的是 Wrapper 範例，可以在瀏覽器中輸入位址 [http://127.0.0.1:56100/Hello](http://127.0.0.1:56100/Hello) 來測試 GET 要求。
如需詳細資訊，請查看 Wrapper 範例。

您也可以更新 MultiplayerSettings.json 中 **NumHeartBeatsForActivateResponse** 和 **NumHeartBeatsForTerminateResponse** 的值，以調整待命/作用中狀態的持續時間。


## Related topics

- [使用 LocalMultiplayerAgent 對容器遊戲伺服器進行偵錯](/zh-TW/services/playfab/multiplayer/servers/LocalMultiplayerAgent/run-container-gameserver.md)
- [在本機對遊戲伺服器進行偵錯以及與 PlayFab 整合](/zh-TW/services/playfab/multiplayer/servers/locally-debugging-game-servers-and-integration-with-playfab.md)
- [LocalMultiplayerAgent 概觀](/zh-TW/services/playfab/multiplayer/servers/LocalMultiplayerAgent/local-multiplayer-agent-overview.md)
- [GSDK 專案測試和偵錯](/zh-TW/services/playfab/multiplayer/servers/server-sdks/unreal-gsdk/third-person-mp-example-project-local-deployment-and-debugging.md)
- [直接連線以對遊戲伺服器進行偵錯](/zh-TW/services/playfab/multiplayer/servers/directly-debugging-game-servers.md)
