

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 优先考虑游戏会话放置
<a name="queues-design-priority"></a>

Amazon GameLift Servers 采用算法来确定如何对队列的目标进行优先级排序，并决定新游戏会话的放置位置。该算法基于一组有序的标准。您可以使用默认的优先顺序，也可以自定义顺序。您可以随时编辑队列的优先级顺序。

**默认优先顺序**

1. **延迟** – 如果游戏会话放置请求包含玩家特定位置的延迟数据，则 Amazon GameLift Servers 会计算每个位置的玩家平均延迟，并尝试将游戏会话放置在平均值最低的实例集位置。

1. **成本** – 如果请求未包含延迟数据，或者多个实例集的延迟时间相等，则 Amazon GameLift Servers 会评估每个实例集的托管成本。实例集托管成本因实例集类型（竞价型或按需型）、实例类型及位置而异。

1. **目标** – 如果多个实例集具有相同的延迟和成本，则 Amazon GameLift Servers 会根据队列配置中列出的目标顺序对实例集进行优先级排序。

1. **位置** – 对于拥有多位置实例集的队列，如果所有其他标准都相同，则 Amazon GameLift Servers 会根据字母顺序对实例集的位置进行优先级排序。

## 自定义队列对游戏会话放置的优先级排序方式
<a name="queues-design-priority-custom"></a>

您可以选择自定义队列对放置标准的优先级排序方式。该队列将对接收到的所有游戏会话放置请求应用自定义优先级排序。

**注意**  
如果您创建自定义优先级配置时未包含全部四个标准，则 Amazon GameLift Servers 会自动按默认顺序追加所有缺失的标准。

**自定义队列的优先级配置**

使用 [Amazon GameLift Servers 控制台](https://console.amazonaws.cn/gamelift/)或 Amazon Command Line Interface （Amazon CLI）创建自定义优先级配置。

------
#### [ Console ]

在 [Amazon GameLift Servers 控制台](https://console.amazonaws.cn/gamelift/)中，您可以在创建新队列或更新现有队列时自定义队列的优先级。选择要工作的 Amazon 区域。

打开控制台左侧导航栏并选择**队列**。在“队列”页面中，选择现有队列并选**编辑**。

1. 转到**游戏会话放置优先级**部分。拖放每个优先级标准以创建所需顺序。

1. 转到**位置顺序**部分。添加您想要确定其优先级的任何位置。当队列中有多个位置的实例集时，此列表非常有用。您至少必须指定一个位置。在此处指定的位置将优先处理，随后处理队列目标中的所有其他位置。

1. 选择**保存更改**。

------
#### [ Amazon CLI ]

使用带有`--priority-configuration`选项的[https://awscli.amazonaws.com/v2/documentation/api/latest/reference/gamelift/update-game-session-queue.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/gamelift/update-game-session-queue.html)命令来自定义队列的优先级顺序。 Amazon GameLift Servers更新当前默认 Amazon 区域中的队列，或者您可以添加`--region`标签以指定其他 Amazon 区域。

以下示例请求将为指定队列添加或更新优先级配置

```
aws gamelift update-game-session-queue \ 
    --name "example-queue-with-priority"
    --priority-configuration PriorityOrder="COST','LOCATION","DESTINATION",LocationOrder="us-east-1","us-east-2","ca-central-1","us-west-2" \
```

------

## 按玩家延迟确定放置优先级
<a name="queues-design-priority-custom-latency"></a>

如果您想为玩家提供最佳的玩家体验并确保将延迟降至最低，请在设置游戏会话放置系统时采取以下步骤：
+ 在选择放置游戏会话的位置时，将您的队列设置为优先考虑延迟。默认情况下，延迟位于优先级列表的顶端。您还可以自定义队列的优先级配置，并选择按优先级顺序排列延迟的位置。
+ 为您的队列设置玩家延迟策略。延迟策略允许您对游戏会话放置中允许的延迟量设置硬性限制。如果 Amazon GameLift Servers 无法在不超过限制的情况下放置游戏会话，则放置请求将超时并失败。您可以设置单个延迟策略，也可以创建一系列随着时间的推移逐渐放宽延迟限制的策略。通过一系列策略，您可以指定极低的初始延迟限制，并且在短暂延迟后仍然可以容纳延迟较高的玩家。有关创建延迟策略的详细信息，请参阅[创建玩家延迟政策](queues-design-latency.md)。
+ 在提出游戏会话放置请求时（参见 [StartGameSessionPlacement](https://docs.amazonaws.cn/gameliftservers/latest/apireference/API_StartGameSessionPlacement.html)），请包括每位玩家的延迟数据。玩家延迟数据包含游戏会话可能放置的每个可能位置的对应数值。例如，对于将游戏会话置于 us-ea Amazon Web Services 区域 st-2 和 ca-central-1 中的队列，延迟数据可能如下所示：

  ```
  "PlayerLatencies": [ 
      { "LatencyInMilliseconds": 100, "PlayerId": "player1", "RegionIdentifier": "us-east-2" },
      { "LatencyInMilliseconds": 100, "PlayerId": "player1", "RegionIdentifier": "ca-central-1" },
      { "LatencyInMilliseconds": 150, "PlayerId": "player2", "RegionIdentifier": "us-east-2" },
      { "LatencyInMilliseconds": 150, "PlayerId": "player2", "RegionIdentifier": "ca-central-1" }
    ]
  ```

  要获得准确的延迟测量值，请使用 Amazon GameLift Servers 的 UDP ping 信标。这些端点使您能够测量玩家设备与每个潜在托管位置之间的实际 UDP 网络延迟，从而比使用 ICMP ping 更准确地做出放置决策。有关使用 UDP ping 信标测量延迟的更多信息，请参阅 [UDP ping 信标](reference-udp-ping-beacons.md)。

## 按位置确定放置优先级
<a name="queues-design-priority-custom-location"></a>

您可以配置队列，使其根据地理位置优先级列表放置游戏会话。位置是队列决定新游戏会话放置位置的标准之一。默认情况下，位置的优先级排在延迟、成本和目标之后，位列第四。

对于游戏会话放置，目标和位置具有略微不同的含义：
+ *目标*是指特定的实例集，包含该实例集的所有托管资源（无论部署于何处）。按目标确定优先级时，Amazon GameLift Servers 可能会将会话放置到实例集内的任何位置。多位置托管式实例集和 Anywhere 实例集的托管资源可部署于一个或多个位置。
+ *位置*是指实例集托管资源部署的具体地理位置。一个队列可以有多个位置，其中可能包括 Amazon Web Services 区域 Local Zones 或自定义位置（对于 Anywhere 队列）。单位置托管式实例集仅有一个位置，且该位置始终为 Amazon Web Services 区域。多位置实例集有一个主区域，并可包含远程位置。Anywhere 实例集有一个或多个自定义位置。

按位置确定放置优先级时，Amazon GameLift Servers 会查找包含优先级位置的所有队列目标，然后在其中搜索可用的托管资源。如果存在多个包含优先级位置的目标，则 Amazon GameLift Servers 会转而采用下一个优先级标准（成本、延迟、目标）。

您可以通过多种方式影响队列位置的优先级排序 
+ 配置队列处理所有游戏会话放置请求的方式：
  + **向队列添加优先级配置。**队列的优先级配置包括位置的有序列表。您可以指定一个或多个位置来确定其优先级。此列表不会排除任何位置，仅告知 Amazon GameLift Servers 会优先在哪些位置查找可用的托管资源。有序位置列表的一个常见用途是：当您希将大部分流量导入到一个或多个特定的地理位置，同时将其他位置作为备份容量时。通过调用添加优先级配置[UpdateGameSessionQueue](https://docs.amazonaws.cn/gameliftservers/latest/apireference/API_UpdateGameSessionQueue.html)。
  + **向队列添加筛选条件配置。**筛选条件配置是队列的允许列表。它指示 Amazon GameLift Servers 在寻找可用的托管资源时忽略列表之外的所有位置。筛选条件配置有两种常见用途。首先，对于具有多个位置的实例集，您可以使用筛选条件来排实例集内的某些位置。其次，在某个位置出现暂时性问题时，您可能希望暂时禁止在该位置上放置。由于您可以随时更新队列的筛选条件配置，因此可以根据需要轻松添加和移除位置。通过调用添加过滤器配置[UpdateGameSessionQueue](https://docs.amazonaws.cn/gameliftservers/latest/apireference/API_UpdateGameSessionQueue.html)。
+ 使用特殊指令处理个别放置请求：
  + **在游戏会话放置请求中包含优先级覆盖列表。**您可以根据任何[StartGameSessionPlacement](https://docs.amazonaws.cn/gameliftservers/latest/apireference/API_StartGameSessionPlacement.html)请求提供备用优先位置列表。此列表仅对本次请求生效，将覆盖队列中配置的位置优先级，且不会影响任何其他请求。此覆盖功能需满足以下要求：
    + 仅当队列已设置优先级配置且将 `LOCATION` 设为第一个优先级时，才使用覆盖列表。
    + 请勿在同一放置请求中包含玩家延迟数据。包含延迟数据会在对位置进行优先级排序时引发冲突，而 Amazon GameLift Servers 无法解决此类冲突。
    + 设定当 Amazon GameLift Servers 在优先级覆盖列表中找不到可用的资源时的处理方式。您可以选择回退到队列的其他位置，也可以将放置范围限制在覆盖列表内。默认情况下，Amazon GameLift Servers 会回退以尝试放置在队列的其他位置。
    + 根据需要更新队列的筛选条件配置，例如在覆盖列表中添加位置。覆盖列表不会使筛选条件列表失效。