与 PlayFab 多人游戏服务器集成

匹配包括一个可以自动为获得的比赛创建游戏服务器的选项。 分配的服务器会运行生成,而生成在队列的配置中进行配置。启动时,服务器在比赛的成员中传递(作为初始玩家列表)。

匹配队列绑定到单个多人游戏服务器生成或绑定到生成别名。

使用匹配和服务器的直接集成的要求

若要从匹配分配多人游戏服务器,首先需要配置生成并进行部署。 可以选择创建生成别名,也可以使用该别名。 首选生成别名,因为它们可让你更灵活地使用游戏。 按照此处提供的链接获取有关多人游戏服务器版本多人游戏服务器生成别名的详细信息

匹配还需要将区域选择规则添加到队列,以便在生成的最佳区域中分配比赛。 传递到区域选择规则中的延迟测量值应与生成在其中处于活动状态的区域匹配。 有关如何将属性传递给区域选择规则的详细信息,请参阅 区域选择规则

为队列激活服务器分配

若要为队列启用服务器分配,需要在队列配置页面上启用“启用服务器分配”复选框。 启用后,选择“生成别名”或“生成 ID”。从下拉列表中选择队列要使用的正确值。 启用该功能后,匹配会尝试为队列中创建的所有比赛分配服务器。

具有多人游戏服务器集成的队列的配置应类似于使用生成 ID。

"MatchmakingQueue": {
    "Name": "ServerEnabledQueue",
    "MinMatchSize": 2,
    "MaxMatchSize": 2,
    "ServerAllocationEnabled": true,
    "BuildId": "88b3e315-829c-4b6d-9872-74f427ad5331",
	"RegionSelectionRule": {
		"MaxLatency": 1000,
		"Path": "Latencies",
		"Weight": 1.0,
		"Name": "RegionSelectionRule"
	}
}

下面是使用生成别名的同一示例。

"MatchmakingQueue": {
    "Name": "ServerEnabledQueue",
    "MinMatchSize": 2,
    "MaxMatchSize": 2,
    "ServerAllocationEnabled": true,
    "BuildAliasParams": {
        "AliasId": "d14e2ac7-ea51-47aa-a7ba-cc427ab74f9s"
    },
	"RegionSelectionRule": {
		"MaxLatency": 1000,
		"Path": "Latencies",
		"Weight": 1.0,
		"Name": "RegionSelectionRule"
	}
}

对匹配的调用流在启用服务器分配后会保持不变。 匹配为比赛分配服务器后,可以通过调用 GetMatch,从 Match 对象本身读取得到的服务器详细信息。

下面是对启用了服务器分配的队列进行的 GetMatch 调用的示例响应。

{
    "MatchId": "7c36330d-46b5-443f-8d8f-10390bce09d5",
    "Members": [{
        "TeamId": "",
        "Entity": {
            "Id": "67282A13A1A58910",
            "Type": "title_player_account",
            "TypeString": "title_player_account"
        },
        "Attributes": {
            "DataObject": null,
            "EscapedDataObject": "{\"StringEqualityRulePath\":\"0bc42969-76b1-4dcb-871d-d6e19cee741b\"}"
        }
    },
    {
        "TeamId": "",
        "Entity": {
            "Id": "6DB2B17FD21CC230",
            "Type": "title_player_account",
            "TypeString": "title_player_account"
        },
        "Attributes": {
            "DataObject": null,
            "EscapedDataObject": "{\"StringEqualityRulePath\":\"0bc42969-76b1-4dcb-871d-d6e19cee741b\"}"
        }
    }],
    "RegionPreferences": ["WestUs", " EastUs"],
    "ServerDetails": {
        "IPV4Address": "40.76.31.170",
        "Ports": [{
            "Name": "game_port",
            "Num": 30003
        }]
    }
}

客户端可以使用响应的服务器详细信息部分中的 IP 和端口连接到服务器。 有关如何将客户端连接到多人游戏服务器的进一步信息,请参阅 将客户端连接到服务器

注意

当生成的某个区域耗尽容量时,匹配无法为该区域中的队列分配比赛。 匹配会继续重试分配,直到票证过期。 若要提高多人游戏容量,请参阅访问增加的核心限制和其他 Azure 区域

传递给游戏服务器的信息

下面是匹配会传递给服务器的信息的列表。

  • SessionId - 服务器的 SessionId 等于比赛的 MatchId。
  • InitialPlayers - 此值设置为比赛中成员的列表。 可以使用 GSDK 在游戏中读取玩家列表。
  • PreferredRegions - 此字段设置为比赛中的 RegionPreferences 字段。 游戏服务器服务从此列表中选择服务器的相应区域。

匹配不会将任何票证属性传递给游戏服务器。 如果游戏需要访问服务器上的任何票证属性,可以通过调用 GetMatch 并将 ReturnMemberAttributes 标头设置为 true 来实现目的。

注意

我们最近启用了在服务器分配期间传递队列名称的功能。 此功能处于预览状态,你可以在 此处 阅读有关它的详细信息。