Realtime 서버 작동 방식 - 아마존 GameLift

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Realtime 서버 작동 방식

이 주제에서는 관리형 Amazon에 대한 개요를 제공합니다. GameLift 실시간 서버 솔루션을 제공합니다. 여기서는 게임에 대해 해당 솔루션이 적합한 경우와 실시간 서버가 멀티플레이어 게임을 지원하는 방법을 설명합니다. 기타에 대해 자세히 알아보려면 GameLift 솔루션, 참조Amazon GameLift 란 무엇입니까?.

Realtime 서버란 무엇입니까?

실시간 서버는 가볍고 ready-to-go 게임 서버가 사용하는 GameLift 는 멀티플레이어 게임에 사용할 수 있도록 합니다. 많은 게임에는 복잡한 물리 및 계산을 처리하기 위해 사용자 지정 게임 서버가 필요하지만, 다른 게임에는 이 서버가 필요하지 않습니다. 실시간 서버는 사용자 지정 게임 서버를 개발, 테스트 및 배포할 필요가 없으므로, 이 솔루션을 선택하면 게임을 완성하는 데 필요한 시간과 노력을 최소화할 수 있습니다.

이 기능은 다음과 같습니다.

  • 게임 클라이언트 및 서버 상호 작용을 위한 전체 네트워크 스택입니다. 실시간 서버는 메시징에 TCP 및 UDP 채널을 사용합니다. 또한 TLS 인증서를 활성화하여 기본 제공 서버 인증 및 데이터 패킷 암호화를 사용할 수 있습니다.

  • 핵심 게임 서버 기능. 실시간 서버는 게임 세션을 시작 및 중지하고, 게임 및 매치 데이터를 관리하며, 클라이언트 연결을 수락합니다. 게임 서버는 각 클라이언트에서 게임 상태 정보를 수신하고 게임 세션의 다른 클라이언트에 해당 정보를 릴레이하여 동기화된 게임 세션 상태를 유지합니다.

  • 와 통합 된 GameLift 서비스. 실시간 서버는 다음과 통신합니다. GameLift 서비스는 실시간 서버에 게임 세션을 시작하고, 플레이어가 연결할 때 플레이어를 확인하며, 게임 서버에서 플레이어 연결 상태 및 게임 상태 확인을 수집합니다.

  • 사용자 지정 가능한 서버 로직. Realtime 서버를 구성하고 게임에 가장 적합한 서버 측 게임 로직을 사용하여 Realtime 서버를 구성하고 사용자 지정할 수 있습니다. 또는 최소한의 구성을 제공하고 간단한 릴레이 서버로 사용할 수 있습니다. Realtime 서버 사용자 지정 섹션에 대해 자세히 알아봅니다.

  • Realtime 구성 및 서버 로직으로 라이브 업데이트. Realtime 서버 구성을 언제든지 업데이트합니다. GameLift 업데이트된 구성 스크립트를 정기적으로 확인하여 플릿에 배포합니다.

  • 다양한 컴퓨팅 리소스 옵션. Realtime 서버는 Linux에서 실행됩니다. 플릿의 컴퓨팅 하드웨어 유형을 선택하고 스팟 인스턴스를 사용할지 또는 온디맨드 인스턴스를 사용할지를 선택합니다.

  • FlexMatch 매치 메이킹. Realtime 서버를 사용하는 게임 클라이언트는 Realtime 서버를 사용하는 게임 클라이언트는 Realtime 서버를 FlexMatch 매치메이킹 기능 (대규모 매치를 포함하여).

  • 호스팅 리소스의 유연한 제어. 실시간 서버와 함께 배포된 게임의 경우 모두 GameLift auto-scaling, 다중 리전 대기열, FleetIQ를 사용한 게임 세션 배치, 게임 세션 로깅 및 지표 등의 관리 기능. 호스팅 리소스가 활용되는 방식을 결정합니다.

플릿을 만들고 구성 스크립트를 제공하여 Realtime 서버를 설정합니다. Realtime 서버를 만드는 방법과 에서 Realtime 서버를 만드는 방법에 대해 자세히 알아봅니다.Realtime Server 시작하기.

게임에 실시간 서버 선택

사용자 지정 게임 서버를 빌드하는 대신 실시간 서버를 선택하려면 게임에 서버 복잡성이 필요한지 여부를 먼저 결정해야 합니다. 실시간 서버는 경량 게임 또는 게임 클라이언트에서 더 많은 비율의 컴퓨팅 작업을 관리하는 게임에 가장 적합합니다. 예를 들면 메시징 게임, 턴 방식 전략 게임, 다양한 유형의 모바일 게임이 있습니다.

핵심 구성 요소

Realtime 서버를 사용하여 작업할 때 사용하는 구성 요소는 다음과 같습니다. 실시간 서버를 사용한 게임 아키텍처에서 이러한 구성 요소와 이러한 구성 요소가 함께 작동하는 방식에 대해 자세히 알아보십시오.

  • ARealtime 서버는 게임을 위한 클라이언트 및 서버 네트워킹을 제공합니다. 에 의해 통보되면 게임 세션이 시작됩니다. GameLift 서비스를 제공하고, 플레이어가 연결할 때 플레이어에 대한 확인을 요청하며, 플레이어 연결 상태 및 게임 상태를 보고합니다. 이 서버는 연결된 모든 플레이어 간에 게임 상태 데이터를 릴레이하고, 제공되는 경우 사용자 지정 게임 로직을 실행합니다.

  • 게임 클라이언트는 플레이어의 디바이스에서 실행되는 게임 소프트웨어입니다. 게임 클라이언트는 백엔드 서비스를 통해 GameLift 서비스는 참가할 게임 세션을 찾거나 새 게임 세션을 시작하고, 실시간 서버에 연결하여 게임에 참여합니다. 연결되면 게임 클라이언트는 실시간 서버를 통해 게임의 다른 플레이와 데이터를 주고 받습니다.

  • ARealtime 스크립팅는 게임에 대한 구성 설정과 선택적 사용자 지정 게임 로직을 제공합니다. 이 스크립트에는 최소 구성 설정이 포함되거나 더 복잡한 게임 로직이 있을 수 있습니다. GameLift 는 새 호스팅 리소스를 시작할 때 Realtime 서버와 함께 Realtime 스크립트를 배포합니다. Node.solutions 기반으로 스크립트를 작성합니다. JavaScript.

  • GameLift 서비스는 실시간 서버를 호스팅하는 데 필요한 컴퓨팅 리소스를 관리하고 플레이어가 게임에 연결할 수 있도록 해줍니다. 이 서비스는 플레이어 수요에 맞게 리소스 수를 조절하고, 활성 게임 세션에서 플레이어 슬롯을 찾아 예약하여 플레이어 참가 요청을 처리하며, 실시간 서버를 시작하여 게임 세션을 시작하고, 플레이어가 게임 서버에 연결할 때 플레이어를 확인합니다. 또한 이 서비스는 Realtime 서버 상태 및 플레이어 사용률에 대한 지표를 수집합니다.

  • 백엔드 서비스다음과 관련된 작업을 처리하는 추가 사용자 지정 서비스입니다. GameLift. 모범 사례로, 백엔드 서비스는 GameLift 서비스. 백엔드 서비스를 사용하여 보안 및 효율성을 향상시킵니다.

  • A게임 세션는 Realtime 서버에서 실행되는 게임의 인스턴스입니다. 플레이어는 게임 세션에 연결하여 게임을 플레이하고 다른 플레이어들과 상호 작용합니다.

실시간 서버가 게임 세션을 관리하는 방법

GameLift 는 완전 사용자 지정 게임 서버를 사용하여 게임 세션을 처리하는 것과 동일한 방식으로 실시간 서버를 사용하여 게임 세션을 관리합니다. 플레이어는 게임 클라이언트를 사용하여 요청을 전송함으로써 새로운 게임 세션을 생성하거나, 기존 게임 세션을 검색하고 참여합니다. 게임 세션 배치 및 배치를 포함하여 게임 세션을 만드는 대부분의 방법 FlexMatch 매치 메이킹은 실시간 서버에서 사용할 수 있습니다 (매치 채우기는 사용할 수 없음).

Realtime 스크립트로 빌드하여 게임 세션 관리에 대한 사용자 지정 로직을 추가할 수 있습니다. 코드를 작성하여 서버별 객체에 액세스하거나, 콜백을 사용하여 이벤트 중심 로직을 추가하거나, 타이머 또는 상태 확인과 같은 비 이벤트 시나리오를 기반으로 로직을 추가할 수도 있습니다. 예를 들어, 게임 세션이 시작 또는 종료될 때 작업을 시작하기 위해 게임 세션 객체에 액세스할 수 있습니다.

실시간 클라이언트와 서버가 상호 작용하는 방식

게인 세션 중 게임의 게임 클라이언트는 메시징을 통해 상호 작용합니다. 게임 클라이언트는 메시지를 사용하여 활동, 게임 상태 및 관련 게임 데이터를 교환합니다. 게임 클라이언트는 백엔드 서비스를 통해 실시간 서버에 메시지를 보냅니다. 그러면 이 서비스는 게임 클라이언트 간에 메시지를 릴레이합니다. 게임 클라이언트는 Realtime 클라이언트 SDK를 사용하여 서버 및 백엔드 서비스와 통신합니다. 이 SDK를 게임 클라이언트에 통합합니다. 클라이언트 SDK는 클라이언트가 게임에 연결하고 메시지를 전송 및 수신하며 게임 연결을 해제하기 위해 사용할 수 있는 동기식 API 호출 세트를 정의합니다. 또한 클라이언트가 특정 이벤트에 응답할 수 있도록 게임 클라이언트에서 구현할 수 있는 비동기 콜백 세트도 정의합니다.

Realtime 스크립트에 게임 로직을 추가하여 클라이언트와 서버가 상호 작용하는 방식을 사용자 지정할 수 있습니다. Realtime 게임 로직을 사용하면 Realtime 서버가 이벤트 중심 응답을 시작하는 콜백을 구현할 수 있습니다. 예를 들어, 게임 클라이언트가 서버에게 플레이어가 성과에 도달했음을 알리면 서버는 다른 게임 클라이언트에 메시지를 전송하여 공지를 표시합니다.

통신 프로토콜

실시간 서버와 연결된 게임 클라이언트 간의 통신은 안정적인 전송을 위한 TCP 연결과 빠른 전송을 위한 UDP 채널이라는 두 개의 채널을 사용합니다. 메시지를 생성할 때 게임 클라이언트는 메시지의 특성에 따라 어떤 프로토콜을 사용할지를 선택합니다. 메시지 전송은 기본적으로 UDP로 설정됩니다. UDP 채널을 사용할 수 없는 경우 GameLift 는 TCP를 대체 수단으로 사용하여 메시지를 보냅니다.

메시지 콘텐츠

메시지 콘텐츠는 필요한 작동 코드(opCode)와 페이로드(선택 사항)의 두 가지 요소로 구성됩니다. 메시지의 opCode는 특정 플레이어 활동 또는 게임 이벤트를 식별하는 반면, 페이로드는 필요 시 작업 코드에 관련된 추가 데이터를 제공합니다. 이 두 요소는 모두 개발자가 정의합니다. 게임 클라이언트는 수신하는 메시지의 opCodes를 기반으로 조치를 취합니다.

플레이어 그룹

Realtime 서버는 플레이어 그룹을 관리하기 위한 기능을 제공합니다. 기본적으로 는 기본적으로 는 GameLift 게임에 연결된 모든 플레이어를 “모든 플레이어” 그룹에 배치합니다. 또한, 개발자는 게임을 위한 기타 그룹을 설정할 수 있으며, 플레이어는 동시에 여러 그룹의 멤버일 수 있습니다. 그룹 멤버는 그룹의 모든 플레이어에게 메시지를 전송하거나 게임 데이터를 그룹과 공유할 수 있습니다. 그룹에 가능한 한 가지 사용은 플레이어 팀을 설정하고 팀 통신을 관리하는 것입니다.

TLS 인증서가 있는 Realtime 서버

TLS 인증서 생성을 사용하여 실시간 서버 집합을 생성하도록 선택할 수 있습니다. GameLift플릿의 각 인스턴스에 대한 DNS 항목을 만듭니다. 이렇게 하면 게임은 클라이언트 서버 연결을 인증하고 모든 게임 클라이언트 서버 통신을 암호화할 수 있습니다. 이 기능을 사용하면 강화된 보안과 암호화된 통신이 필요한 모바일을 포함한 다양한 플랫폼에서 게임을 게시할 수 있습니다.AWS Certificate Manager ACM) 는 추가 비용 없이 이러한 서비스를 제공합니다.

실시간 서버를 사용하면 서버 인증 및 데이터 패킷 암호화가 이미 서비스에 기본 제공되며, TLS 인증서 생성을 켤 때 이러한 기능이 활성화됩니다. 게임 클라이언트가 Realtime 서버와 연결하려고 하면 서버는 TLS 인증서를 사용하여 자동으로 응답하며 클라이언트가 이러한 작업을 확인합니다. GameLift 는 TCP (Websockets) 통신에는 TLS를 사용하고 UDP 트래픽에는 DTLS를 사용하여 암호화를 처리합니다.

Realtime 서버 사용자 지정

Realtime 서버는 상태 비저장 릴레이 서버 역할을 수행합니다. 실시간 서버는 게임에 연결된 게임 클라이언트 간에 메시지 및 게임 데이터 패킷을 릴레이하지만, 메시지를 평가하거나 데이터를 처리하거나 게임 플레이 로직을 수행하지 않습니다. 이 방식으로 사용되는 각 게임 클라이언트는 게임 상태 보기를 유지하고 릴레이 서버를 통해 다른 플레이어에게 업데이트를 제공합니다. 각 게임 클라이언트는 이러한 업데이트를 통합하고 자체 게임 상태를 조정합니다.

Realtime 스크립트 기능에 추가하여 서버를 사용자 지정할 수 있습니다. 예를 들어, 게임 로직을 사용하면 서버 권한이 있는 게임 상태 보기와 함께 상태 저장 게임을 빌드할 수 있습니다.

GameLift 는 Realtime 스크립트에 대한 일련의 서버 측 콜백을 정의합니다. 이러한 콜백을 구현하여 이벤트 중심 기능을 서버에 추가합니다. 예를 들어 다음을 수행할 수 있습니다.

  • 게임 클라이언트가 서버에 연결하려고 할 때 플레이어를 인증합니다.

  • 요청될 때 플레이어가 그룹에 참가할 수 있는지 여부를 확인합니다.

  • 특정 플레이어에서 또는 대상 플레이어로 메시지를 언제 전송할지를 결정하거나, 응답에서 추가 처리를 수행합니다.

  • 플레이어가 그룹에서 나가거나 서버에서 연결이 제거되면 모든 플레이어에게 알립니다.

  • 게임 세션 개체 또는 메시지 객체의 콘텐츠를 보고 데이터를 사용합니다.

실시간 서버 배포 및 업데이트

실시간 서버는 다음에 의해 구동됩니다. GameLift 전용 서버 리소스. 제공되는 안정성과 보안에는 차이가 없습니다. 모든 서버와 마찬가지로 다음을 사용하여 대기 시간을 최소화 할 수 있습니다. GameLift의 매치메이킹 및 대기열을 플레이어 위치에 따라 게임 세션 배치를 최적화하는 Fleet IQ와 함께 사용합니다.

Realtime 서버의 주요 장점은 언제든지 스크립트를 업데이트할 수 있는 기능입니다. 스크립트를 업데이트할 때 스크립트를 업데이트할 때, GameLift 는 몇 분 내에 새 버전을 모든 호스팅 리소스에 배포합니다. 이후 GameLift 는 새로운 스크립트를 배포합니다. 이 시점 이후에 만든 모든 새로운 게임 세션은 새로운 스크립트 버전을 사용합니다. 기존 게임 세션은 원래 버전을 계속 사용합니다.