멀티 플레이어에 대해 대규모 세션 사용
이 항목에서는 100명 이상의 멤버를 처리할 수 있는 멀티 플레이어 대규모 세션을 만드는 방법에 대해 설명합니다. 이 시나리오는 MMO(대규모 멀티 플레이어 온라인) 게임 및 브로드캐스트(대부분의 멤버가 관중인 경우)에 가장 일반적입니다. 대규모 세션 지원은 다른 게임 스타일에도 적용될 수 있습니다.
경우에 따라 소규모 플레이어 그룹을 처리하는 경우에도 대규모 세션이 유용할 수 있습니다.
여러 플레이어가 동일한 세션에 속하기를 원하지만 게임 내에서 서로 마주치지 않는지를 확인하지 않아도 된다면, 대규모 세션의 encounters
속성을 사용할 수 있습니다.
현재 대규모 세션은 멀티 플레이어 관리자에서 지원되지 않습니다. MPSD(멀티 플레이어 서비스 디렉터리)에 대한 직접 호출을 사용하려면 2015 멀티 플레이어 API를 사용해야 합니다.
대규모 세션은 일반 세션과는 약간 다르게 처리됩니다.
- 대규모 세션에는 일반 세션보다 더 적은 정보가 포함되지만 더욱 효율적입니다.
- 대규모 세션은 최대 10,000명의 멤버를 지원합니다.
- 대규모 세션을 구독할 수는 없습니다.
- 대규모 세션의 멤버에 대한 최근 플레이어 목록에 자동으로 추가되지 않습니다.
최근 플레이어
Xbox 플레이어가 새로운 플레이어와 멀티 플레이어 게임을 할 때, 게임 후 최근 플레이어 목록에 있는 대시보드에서 해당 플레이어를 볼 수 있습니다.
- 플레이어가 게임의 새 플레이어와 좋은 경험을 한 경우 다시 플레이를 하거나 친구로 추가할 수 있습니다.
- 플레이어가 다른 플레이어와의 경험이 좋지 않은 경우 나중에 해당 플레이어를 피하거나, 게임 종료 후 나쁜 행동을 신고할 수도 있습니다.
정기 세션 중에 Xbox 서비스는 동일한 세션의 플레이어를 최근 플레이어 목록에 자동으로 추가합니다. 하지만 대규모 세션을 사용하는 경우 추가 단계를 통해 최근 플레이어 목록이 적절히 채워지는지 확인해야 합니다.
대규모 세션 설정
대규모 세션을 설정하려면 섹션 템플릿의 기능 섹션에 "large": true
를 추가합니다.
maxMembersCount
값을 최대 10,000까지 설정할 수 있습니다.
다음 템플릿은 최대 2,000명의 플레이어를 지원하는 대규모 세션을 만듭니다.
{
"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명의 플레이어 세션은 멤버 가입 또는 탈퇴와 같은 업데이트에 대해 플레이어당 평균적으로 2분마다 작성할 수 있습니다.
다른 속성은 대규모 세션에서 유지 관리해서는 안 됩니다.
동일한 대규모 세션에서 플레이어 연결
MPSD에서 대규모 세션을 검색하는 경우 응답에 멤버 목록이 포함되지 않습니다. 전체 목록을 가져올 수 있는 방법은 없습니다.
호출자가 세션에 있는 경우 해당 멤버 레코드는 해당 요청에서처럼 members
컬렉션에서 me
(이)라는 레이블이 지정된 유일한 멤버 레코드입니다.
즉, 클라이언트 멤버는 세션에서 자신의 항목만 업데이트할 수 있습니다. 사용자가 지정한 공통 식별자를 제공하기 위해 서버를 사용합니다. Xbox 서비스는 이 식별자를 사용하여 함께 플레이한 플레이어를 연결하여 평판과 최근 플레이어 상태를 업데이트할 수 있습니다.
세션의 플레이어가 함께 플레이했음을 나타내는 두 가지 방법이 있습니다. 즉, 영구 그룹과 짧은 인카운터가 있습니다.
영구 그룹
영구 그룹은 일부 플레이어가 그룹에 참가하거나 그룹에서 탈퇴할 수 있는 지속적으로 함께 플레이하며 이름이 지정된 플레이어 그룹입니다. 그룹 이름은 GUID와 같은 일반 세션에 적용되는 동일한 명명 규칙을 따라야 합니다.
각 멤버가 그룹에 가입하거나 그룹에서 나가면 문자열 배열인 고유한 groups
속성에서 그룹 이름을 추가하거나 제거해야 합니다.
{
"members": {
"me": {
"properties": {
"system": {
"groups": [ "example-group-name" ]
}
}
}
}
}
짧은 인카운터
두 플레이어가 짧게 한 번 만난 경우(짧은 인카운터), 게임은 group
속성 대신 encounters
속성을 사용하여 이를 표시합니다.
각 인카운터에 이름을 지정합니다. 해당 인카운터 후 두(또는 모든) 참가자가 자신의 encounters
속성에 인카운터 이름을 씁니다.
{
"members": {
"me": {
"properties": {
"system": {
"encounters": [ "trade.0c7bbbbf-1e49-40a1-a354-0a9a9e23d26a" ]
}
}
}
}
}
groups
및 encounters
모두에 동일한 이름을 사용할 수 있습니다. 예를 들어, 한 플레이어가 이름이 groups
에 추가된 그룹"과 거래"하는 경우, 해당 인카운터가 있는 플레이어가 “인카운터” 목록에 그룹 이름을 업로드합니다. 따라서 개인에게는 그룹의 모든 멤버가 최근 플레이어로 표시되고 그 반대의 경우도 마찬가지입니다. 그룹의 플레이어는 그룹 멤버 자격을 업데이트하기 위해 어떠한 조치도 취할 필요가 없습니다.
플레이어가 30초 동안 그룹의 멤버인 경우 해당 플레이어는 인카운터로 계산됩니다.
인카운터는 일회성 이벤트로 간주되므로 encounters
속성은 항상 즉시 처리된 다음 세션에서 지워집니다.
encounters
배열은 응답에 나타나지 않습니다.
이와 달리, groups
속성은 변경 또는 제거되거나 멤버가 세션에서 나갈 때까지 유지됩니다.