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

# 为多人游戏启用大型会话

> 如何使用 2015 多人游戏 API 为 MMO 游戏、广播和相遇创建最多包含 10,000 名成员的大型 MPSD 多人游戏会话。

本主题描述如何创建可处理超过 100 名成员的多人游戏*大型会话*。
此场景最常见于大型多人在线 (MMO) 游戏和广播(其中大多数成员是观众)。大型会话支持也可能适用于其他类型的游戏。

在某些情况下,你可能会发现大型会话非常有用,即使是处理较小的玩家群体。
如果你希望多个玩家在同一会话中,但当他们在游戏中未相遇时不必彼此知晓,则可以使用大型会话的 `encounters` 属性。

[Multiplayer Manager](/services/xbox-services/multiplayer/mpm/live-multiplayer-manager-nav) 目前不支持大型会话。你必须使用 2015 多人游戏 API 直接调用多人游戏服务目录 (MPSD)。

大型会话与常规会话的处理略有不同。

* 大型会话包含的信息比常规会话少,但效率更高。
* 大型会话最多支持 10,000 名成员。
* 你无法订阅大型会话。
* 大型会话的成员不会自动加入最近玩家列表。

## 最近玩家

当 XBOX 玩家与新玩家一起玩多人游戏时,游戏结束后,他们可以在仪表板的最近玩家列表中看到这些玩家。

* 如果玩家在游戏中与新玩家有着愉快的体验,他们可能希望再次与他们一起玩或将其添加为好友。
* 如果玩家与一名玩家的体验不佳,他们可能希望在未来避开他们,或在游戏结束后举报不良行为。

在常规会话期间,XBOX 服务会自动将同一会话中的玩家添加到最近玩家列表。
但是,如果你使用大型会话,则必须采取一些额外步骤,以确保正确填充最近玩家列表。

## 设置大型会话

要将会话设置为大型,请在会话模板的 capabilities 部分中添加 `"large": true`。
你可以将 `maxMembersCount` 值设置为最多 10,000。

以下模板创建一个支持最多 2,000 名玩家的大型会话。

```json theme={null}
{
    "constants": {
        "system": {
            "version": 1,
            "maxMembersCount": 2000,
            "visibility": "open",
            "capabilities": {
                "gameplay": true,
                "large": true
            },
            "timeouts": {
                "inactive": 0,
                "ready": 180000,
                "sessionEmpty": 0
            }
        },
        "custom": { }
    }
}
```

## 使用大型会话

将大型会话写入 MPSD 时,我们建议你不要超过每秒 10 次写入。
一个典型的 1,000 名玩家的会话可能平均每两分钟为每个玩家写入一次(例如成员加入或离开等更新)。

其他属性不应在大型会话中维护。

### 关联来自同一大型会话的玩家

当你从 MPSD 检索大型会话时,响应不包含成员列表。没有办法获取完整列表。
如果调用者在会话中,则其成员记录是 `members` 集合中的唯一记录,标记为 `me`(与请求中一样)。

这意味着客户端成员只能更新自己在会话中的条目。他们依靠服务器为其提供一个你指定的公共标识符。XBOX 服务使用此标识符来关联一起玩游戏的玩家,以便更新声誉和最近玩家状态。

有两种方式指示会话中的玩家一起玩了游戏:持久群组和简短相遇。

#### 持久群组

*持久群组*是命名的玩家群组,他们持续一起玩游戏,可能会有一些玩家加入或离开该群组。群组名称应遵循适用于常规会话的相同命名规则,例如 GUID。

当每个成员加入或离开该群组时,他们应从其自己的 `groups` 属性(字符串数组)中添加或删除该群组名称。

```json theme={null}
{
    "members": {
        "me": {
            "properties": {
                "system": {
                    "groups": [ "example-group-name" ]
                }
            }
        }
    }
}
```

#### 简短相遇

如果两名玩家有短暂的、一次性的相遇(*简短相遇*),游戏可以使用 `encounters` 属性(而不是 `group` 属性)指示。

为每次相遇指定一个名称。相遇后,两名(或所有)参与者都将相遇名称写入其自己的 `encounters` 属性。

```json theme={null}
{
    "members": {
        "me": {
            "properties": {
                "system": {
                    "encounters": [ "trade.0c7bbbbf-1e49-40a1-a354-0a9a9e23d26a" ]
                }
            }
        }
    }
}
```

你可以对 `groups` 和 `encounters` 使用相同的名称。例如,如果一名玩家与一个名称已添加到 `groups` 的群组"交易",则发生相遇的玩家将该群组名称上传到其"encounters"列表中。这会使该个体将该群组的所有成员视为最近玩家,反之亦然。该群组中的玩家无需采取任何操作即可更新群组成员资格。

当玩家是群组成员超过 30 秒时,将被视为一次相遇。
由于相遇被视为一次性事件,`encounters` 属性始终会立即处理,然后从会话中清除。

`encounters` 数组永远不会出现在响应中。
相比之下,`groups` 属性会保留,直到被更改或删除,或者成员离开会话。


## Related topics

- [服务到服务多人游戏会话管理](/zh-CN/services/xbox-services/fundamentals/s2s-auth-calls/s2s-calls/s2s-call-patterns/live-mpsd-service-to-service.md)
- [概念](/zh-CN/services/xbox-services/multiplayer/mpsd/concepts/index.md)
- [配置多人服务](/zh-CN/services/xbox-services/multiplayer/concepts/live-configure-the-multiplayer-service.md)
- [多人游戏会话目录 (MPSD) 概念](/zh-CN/services/xbox-services/multiplayer/mpsd/concepts/live-mpsd-concepts-nav.md)
- [多人游戏会话高级主题](/zh-CN/services/xbox-services/multiplayer/mpsd/concepts/live-mpsd-details.md)
