> ## 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.

# 分配游戏服务器并连接 Visual Studio 调试器

> 了解如何使用 RequestMultiplayerServer 分配 PlayFab 多人游戏服务器,并将 Visual Studio 调试工具附加到正在运行的会话。

## 分配多人会话

借助 PlayFab 多人游戏服务器 2.0,你可以使用 [RequestMultiplayerServer](xref:titleid.playfabapi.com.multiplayer.multiplayerserver.requestmultiplayerserver) API 分配多人服务器应用程序的实例。

通常,此 API 由你自己的服务(可能是匹配服务或大厅服务)调用,并使用为特定标题配置的 PlayFab 开发者机密密钥。有关机密密钥的详细信息,请参阅[机密密钥管理](/services/playfab/live-service-management/gamemanager/secret-key-management)。

将玩家聚集在一起并分配服务器的典型模式:

1. 客户端收集网络 QoS 信息。
2. 客户端与自定义匹配服务交互,或通过社交邀请聚集。
3. 自定义匹配服务使用按优先级排序的区域列表为群组分配会话。

**RequestMultiplayerServer** 有几个关键参数:

* **BuildID** — 要分配的特定服务器生成。
* **SessionID** — 会话的标识符。*这是由调用方生成的 GUID 字符串*。针对同一逻辑会话对此 API 的重试应重复使用相同的标识符。这可以缓解调用方重试行为创建不必要服务器的可能性。
* **SessionCookie** — 通过游戏服务器 SDK 在激活时传达给已分配会话的任意数据。此字段的典型用途是传达游戏服务器用来对客户端进行身份验证的共享密钥。*数据必须小于 4 KB*。
* **PreferredRegions** — 用于分配服务器的有序区域列表。我们建议使用从客户端设备收集的网络 QoS 度量作为对区域进行排名的主要因素。

成功的分配将返回以下信息:

* 服务器的 **IPv4** 地址。
* **TCP/UDP** 端口映射(请参阅[将客户端连接到游戏服务器](/services/playfab/multiplayer/servers/connecting-clients-to-game-servers))。
* 服务器的**区域**。

<Note>
  你可以使用 MpsAllocatorSample(在[此处](https://github.com/PlayFab/MpsSamples/tree/master/MpsAllocatorSample)找到),在游戏开发期间轻松分配游戏服务器
</Note>

## 客户端分配

多人服务器成本高昂且性能强大。默认情况下,你只能使用 PlayFab 开发者机密密钥从*你自己的*受信任服务请求多人服务器。

但是,*直接*从玩家设备分配服务器可以节省实现服务到服务调用的成本,并在某些情况下很有用。

若要启用客户端分配:

* 从左侧菜单中选择**设置**。
* 选择 **API 功能**选项卡。
* 然后激活**允许客户端启动游戏**选项。

<img src="https://mintcdn.com/microsoft-4404708b/U1LR64ZWxo45eXwl/images/playfab/multiplayer/servers/tutorials/game-manager-settings-api-features-allow-client-to-start-games.png?fit=max&auto=format&n=U1LR64ZWxo45eXwl&q=85&s=3096df2ab104fcd3bed5015146b33436" alt="Game Manager - Settings - API Features - Allow Client to start games" width="1133" height="1200" data-path="images/playfab/multiplayer/servers/tutorials/game-manager-settings-api-features-allow-client-to-start-games.png" />

激活此设置后,你可以使用与该标题关联的任何玩家的实体令牌调用 [RequestMultiplayerServer](xref:titleid.playfabapi.com.multiplayer.multiplayerserver.requestmultiplayerserver)。

## 调试已部署的多人服务器

你可能希望在游戏服务器部署在 Azure 上时远程调试它。使用 Visual Studio,目前需要在容器中安装并配置 Visual Studio 远程调试工具。

<Note>
  以下过程将启用不安全的、未经身份验证的调试。
</Note>

以下过程*仅*应用于面向开发和测试的服务器生成,并在面向玩家的环境中*通常应避免*使用。

1. 获取 VS2017 远程调试工具:

```cmd theme={null}
Invoke-WebRequest -OutFile rtools_setup_x64.exe -Uri
https://aka.ms/vs/15/release/RemoteTools.amd64ret.enu.exe
```

2. 将这些工具包含在游戏服务器资产包中。
3. 作为在 Game Manager 中或使用 Entity API 创建服务器生成的一部分,将端口 4022 TCP 配置为调试端口。
4. 你需要在容器中运行 `msvsmon` 以启用远程调试。常见模式是将 CMD 脚本指定为 Game Start 命令,并使用命令行参数来启动 `msvsmon`,同时启动游戏服务器可执行文件。
5. 使用以下命令执行一次 `msvsmon`:

```cmd theme={null}
/prepcomputer /quiet
```

6. 使用以下标志执行 `msvsmon`(如下所示)。

```cmd theme={null}
/nostatus /noauth /nosecuritywarn /anyuser /nofirewallwarn /nodiscovery /port 4022
```

<Note>
  我们建议*明确列出*端口,以便当端口已被占用时,你的程序可以处理进程退出代码,而不是绑定到未打开的随机端口。
</Note>

7. 分配你的游戏服务器。
8. 使用从分配调用返回的外部调试端口,尝试通过 VS 进行调试。


## Related topics

- [直接连接以调试游戏服务器](/zh-CN/services/playfab/multiplayer/servers/directly-debugging-game-servers.md)
- [Wrapper 示例](/zh-CN/services/playfab/multiplayer/servers/wrapper-sample.md)
- [使用 LocalMultiplayerAgent 调试基于进程的游戏服务器](/zh-CN/services/playfab/multiplayer/servers/LocalMultiplayerAgent/run-process-based-gameserver.md)
- [流式安装:调试](/zh-CN/build/core-features/common/packaging/packaging-debugging.md)
- [多人游戏服务器的生命周期](/zh-CN/services/playfab/multiplayer/servers/multiplayer-game-server-lifecycle.md)
