친구 모범 사례 #

친구 관계는 현대 온라인 게임에서 핵심적입니다. Nakama 기능 세트와 API를 통해 매력적인 친구 경험을 게임으로 구현할 수 있습니다.

이제 게임은 혼자만의 게임이 아닙니다. 평생 가장 친한 친구와 팀을 이루는 것부터 새로운 라이벌과 설절을 벌이는 것까지 게임은 사회적 경험입니다. 개발자가 플레이어의 사회적 관계를 나타내기 위해 유연한 고성능 시스템을 필요로 하므로 매력적인 경험을 만드십시오. Nakama의 경우 친구가 핵심 시스템입니다.

이 페이지에서는 Nakama가 친구 관계(개념 및 데이터 구조 모두)를 나타내는 방법, 친구 관계가 중요한 이유, Nakama 친구 시스템을 최대한 활용하기 위한 몇 가지 지침에 대해 자세히 설명합니다.

친구 관계 모델링 #

Nakama는 저장소에 대한 효율적이고 확장 가능한 접근 방식을 토대로 다양한 관계 상태를 나타낼 수 있는 유연한 자체 친구 관계 모델을 제공합니다.

Nakama에서 이러한 친구 관계의 개념적 기반은 Twitter의 FlockDB에서 착안된 방향성 그래프의 엣지입니다.

예를 들어 플레이어 A와 플레이어 B라는 두 명의 플레이어가 있다고 가정합니다. A와 B가 친구이면 이들의 친구 관계는 엣지 AB(“A는 B와 친구 관계가 있음”) 및 BA(“B는 A와 친구 관계”)로 나타낼 수 있습니다.

플레이어 A 및 B 친구 관계
플레이어 A 및 B 친구 관계

친구 관계 상태 #

두 사람 사이의 친구 관계는 그들 사이의 연결 이상의 의미가 있습니다. Nakama 친구 시스템에서 한 플레이어에서 다른 플레이어로의 각 친구 관계(엣지)에는 친구 관계 수락됨, 친구 관계 보류됨 또는 차단됨이라는 상태가 있습니다. 두 플레이어가 친구 관계가 없으면 이들 사이에 엣지는 없습니다.

Nakama는 다음과 같은 기본 친구 관계 상태를 나타냅니다.

  • 친구 관계 없음: 두 플레이어 사이에 엣지가 없음
  • 비대칭 친구 관계: 한 플레이어에서 다른 플레이어로 보류 중인 친구 요청
  • 대칭 친구 관계: 두 플레이어는 서로 친구입니다.
  • 부정적인 친구 관계: 한 플레이어가 다른 플레이어를 차단했습니다.

Nakama 친구 시스템을 두 플레이어 간의 친구 관계를 나타내는 상태 기계로 생각하십시오. 플레이어는 잘 정의된 경로를 통해 한 상태에서 다음 상태로 전환할 수 있습니다. 다음은 두 플레이어 간 친구 관계의 잠재적 상태를 나타내는 다이어그램입니다.

친구 관계 상태
친구 관계 상태

친구 관계의 이러한 표현은 게임에서 사용되는 가장 일반적인 친구 관계 모델을 처리할 뿐만 아니라 저장 및 쿼리가 효율적이라는 이점이 있습니다.

친구 관계 저장 #

데이터베이스에서 Nakama는 친구 관계 상태에 대한 간단하고 쉽게 이해할 수 있는 표현을 사용합니다. 이 표현은 모든 사용자의 친구 관계를 찾는 것과 같은 가장 일반적인 작업을 빠르고 효율적이며 확장 가능하도록 세밀히 조정되었습니다.

Nakama 저장소 모델을 더 잘 이해하려면 데이터베이스 스키마에 사용되는 기본 키를 검사하는 것이 좋습니다. 구성 내용:

  • 플레이어 ID (source_id)
  • 친구 관계의 상태 (state)
  • 카운터 (position)

이 기본 키는 각 플레이어 친구 관계가 물리적으로 해당 플레이어의 다른 친구 관계에 가깝게 물리적으로 디스크에 저장됨을 의미합니다. 플레이어의 친구 관계가 기록되면 해당 친구 관계의 유형 및 보존 기간에 따라 순차적으로 함께 기록됩니다.

source_idstateposition
4246fc0f-a55f-45da-9b25-8527c2a0d5d107684
4246fc0f-a55f-45da-9b25-8527c2a0d5d107697
4246fc0f-a55f-45da-9b25-8527c2a0d5d117694

즉, 플레이어의 상호 친구가 다른 상호 친구와 함께 기록되고 이후 대기 중인 초대 등이 이어집니다.

물리적 데이터베이스의 관점에서 이 레이아웃은 가장 일반적인 쿼리에 적합합니다. 예를 들어, 주어진 플레이어(예: SELECT * from user_edge WHERE source_id=player_a_id)에 대한 모든 친구 관계를 쿼리하면 데이터베이스에 대한 검색 시간을 최소화하는 연속 행을 쿼리하는 것입니다.

데이터베이스가 이러한 이점을 자동으로 얻지 못하는 경우 인덱스에 의해 조회가 가속화됩니다. 두 특정 사용자 간의 친구 관계(즉, 알려진 두 플레이어 ID 간의 친구 관계)에 대한 쿼리는 구체적으로 인덱싱됩니다.

확장성 #

물리적 데이터베이스의 이점 외에도 친구 스키마를 통해 플레이어에게 더 가까운 친구 관계 데이터를 배포할 수 있으므로 이 스키마가 전 세계 청중으로 확장됩니다.

Nakama는 친구 관계의 양면을 별도로 나타냅니다. “플레이어 A는 플레이어 B와 친구다"에 대한 기록이 있고 “플레이어 B는 플레이어 A와 친구다"에 대한 기록이 있습니다. 데이터베이스를 지리적으로 분할할 때(플레이어와 가장 가까운 인스턴스에 친구 데이터를 저장) 조회는 디스크에서 근처에 있지 않으며 플레이어에서 더 가까운 하드웨어에서 시작됩니다.

개발 모범 사례 #

Nakama의 친구 관계 모델은 게임을 더 쉽게 개발하고 시간이 지남에 따라 성장할 수 있도록 하기 위해 사용됩니다. 이를 최대한 활용하려면 다음 모범 사례를 따르십시오.

개발자 리소스 절약 #

친구 관계를 나타내기 위해 고유한 기본 요소를 다시 만들 필요는 없습니다. Nakama는 게임의 소셜 연결을 나타내는데 필요한 다수의 API와 데이터 구조를 제공합니다. 확장할 때 사용자 지정 구현을 Nakama의 시스템에 다시 넣는 것이 어려울 수 있습니다.

클러스터 리소스 절약 #

개발자의 시간과 마찬가지로 인프라 리소스도 제한되어 있습니다. Heroic Labs는 친구 관계를 지능적으로 읽고, 쓰고, 사용하고 우아하게 확장 및 성장시킬 수 있도록 친구 시스템을 조정했습니다.

풍부한 상호 작용 만들기 #

소셜 네트워크 계정, 싱글 사인온(SSO) 또는 기타 통합에 대해서는 설명하지 않았습니다. Nakama의 친구 시스템은 전체 구조가 아니라 게임 내의 소셜 연결을 위한 빌딩 블록입니다.

소셜 공급자와 동기화하시겠습니까? 친구별로 순위표를 필터링하시겠습니까? 친구의 친구 채팅 그룹을 만드시겠습니까? Nakama의 다른 시스템이나 타사 API로 친구 시스템을 구성하여 이 작업을 수행할 수 있습니다.

Related Pages