Interazioni client/server di gioco con Amazon GameLift - Amazon GameLift

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Interazioni client/server di gioco con Amazon GameLift

I componenti della tua soluzione di GameLift hosting Amazon interagiscono tra loro in modi specifici per eseguire sessioni di gioco in risposta alla domanda dei giocatori. Questo argomento descrive come i componenti comunicano tra loro quando il server di gioco è ospitato su EC2 flotte GameLift gestite da Amazon, flotte Amazon GameLift Anywhere autogestite o una soluzione ibrida.

I componenti della soluzione di hosting includono un server di gioco, il GameLift servizio Amazon, un servizio di backend lato client e un client di gioco. Il server di gioco utilizza il GameLift server Amazon SDK per interagire con il GameLift servizio Amazon. Il servizio di backend utilizza il GameLift servizio Amazon API (parte di AWS SDK) per interagire con il servizio per conto del client di gioco. Quando si accede a una sessione di gioco, il client di gioco si connette direttamente a una sessione di gioco utilizzando l'indirizzo IP e il numero di porta univoci della sessione di gioco.

Diagramma delle interazioni

Il diagramma seguente illustra come i componenti di hosting dei giochi interagiscono in modo che il GameLift servizio Amazon possa monitorare lo stato della disponibilità dei server di gioco e avviare sessioni di gioco in risposta alle richieste dei giocatori.

Comportamento del client/server di gioco per le interazioni chiave, come descritto in questo argomento.

Comportamenti di interazione

Le sezioni seguenti descrivono la sequenza di eventi in ciascuna delle interazioni chiave.

Inizializzazione di un processo del server di gioco

All'avvio, un processo del server di gioco stabilisce la comunicazione con il GameLift servizio Amazon e ne segnala lo stato come pronto per ospitare una sessione di gioco.

  1. Un nuovo processo dell'eseguibile del server di gioco inizia a funzionare su una risorsa di hosting.

  2. Il processo del server di gioco richiama le seguenti SDK operazioni del server in sequenza:

    1. InitSDK()per inizializzare il serverSDK, autenticare il processo del server e stabilire una comunicazione con il servizio Amazon GameLift .

    2. ProcessReady()per comunicare la disponibilità a ospitare una sessione di gioco. Questa chiamata riporta anche le informazioni di connessione del processo, quali client di gioco utilizzano per connettersi alla sessione di gioco e altre informazioni.

    Il processo del server attende quindi le richieste dal servizio Amazon. GameLift

  3. Amazon GameLift aggiorna lo stato del processo del server ACTIVE e lo rende disponibile per ospitare una nuova sessione di gioco.

  4. Amazon GameLift inizia a richiamare periodicamente il onHealthCheck callback per richiedere lo stato di integrità dei processi del server. Queste chiamate continuano mentre il processo del server rimane attivo. Il processo del server deve rispondere correttamente o meno entro un minuto. Se il processo del server non risponde correttamente o non risponde, a un certo punto il GameLift servizio Amazon modifica lo stato attivo del processo server e interrompe l'invio di richieste per l'avvio della sessione di gioco.

Creare una sessione di gioco

Il GameLift servizio Amazon avvia una nuova sessione di gioco in risposta alla richiesta di un giocatore di giocare.

  1. Un giocatore che utilizza il client di gioco chiede di partecipare a una sessione di gioco. A seconda di come il gioco gestisce la procedura di accesso dei giocatori, il client di gioco invia una richiesta al servizio di backend.

  2. Se il processo di iscrizione del giocatore richiede l'avvio di una nuova sessione di gioco, il servizio di backend invia una richiesta per una nuova sessione di gioco al GameLift servizio Amazon. Questa richiesta richiama l'APIoperazione del servizio. StartGameSessionPlacement() (In alternativa, il servizio di backend potrebbe chiamare StartMatchmaking() oCreateGameSession().)

  3. Il GameLift servizio Amazon risponde creando un nuovo GameSessionPlacement ticket con statoPENDING. Restituisce le informazioni sul ticket al servizio di backend, in modo che possa tenere traccia dello stato del ticket di collocamento e determinare quando la sessione di gioco è pronta per i giocatori. Per ulteriori informazioni, consulta Imposta la notifica degli eventi per il posizionamento della sessione di gioco.

  4. Il GameLift servizio Amazon avvia il processo di posizionamento della sessione di gioco. Identifica le flotte da esaminare e cerca in esse un processo server attivo che non ospita una sessione di gioco. Quando individua un processo server disponibile, il GameLift servizio Amazon esegue le seguenti operazioni:

    1. Crea un GameSession oggetto con le impostazioni della sessione di gioco e i dati del giocatore contenuti nella richiesta di posizionamento e imposta lo stato su. ACTIVATING

    2. Richiede al processo del server di avviare una sessione di gioco. Il servizio richiama il onStartGameSession callback del processo server e passa l'oggetto. GameSession

    3. Modifica il numero di sessioni di gioco del processo del server in. 1

  5. Il processo server esegue la sua funzione di onStartGameSession callback. Quando il processo server è pronto ad accettare le connessioni dei giocatori, richiama l'SDKoperazione del server ActivateGameSession() e attende le connessioni dei giocatori.

  6. Il GameLift servizio Amazon aggiorna l'GameSessionoggetto con le informazioni di connessione per il processo del server (come riportato nella chiamata aProcessReady()) e imposta lo stato della sessione di gioco suACTIVE. Inoltre, aggiorna lo stato GameSessionPlacement del ticket aFULFILLED.

  7. Il servizio di backend chiama DescribeGameSessionPlacement() per controllare lo stato del ticket e ottenere informazioni sulla sessione di gioco. Quando la sessione di gioco è attiva, il servizio di backend notifica il client di gioco e trasmette le informazioni di connessione alla sessione di gioco.

  8. Il client di gioco utilizza le informazioni di connessione per connettersi direttamente al processo del server di gioco e partecipare alla sessione di gioco.

Aggiungere un giocatore a una partita

Un gioco può opzionalmente utilizzare le sessioni dei giocatori per tenere traccia delle connessioni dei giocatori alle sessioni di gioco. Le sessioni dei giocatori possono essere create individualmente o come parte di una richiesta di posizionamento per le sessioni di gioco.

  1. Il servizio di backend richiama l'APIoperazione del servizio CreatePlayerSession() con un ID di sessione di gioco.

  2. Il GameLift servizio Amazon controlla lo stato della sessione di gioco (deve esserloACTIVE) e cerca uno slot per giocatori libero nella sessione di gioco. Se uno slot è disponibile, il servizio esegue le seguenti operazioni:

    1. Crea un nuovo PlayerSession oggetto e imposta lo stato suRESERVED.

    2. Risponde alla richiesta del servizio di backend con informazioni sulla sessione del giocatore.

  3. Il servizio di backend trasmette le informazioni sulla sessione del giocatore al client di gioco insieme alle informazioni sulla connessione della sessione di gioco.

  4. Il client di gioco utilizza le informazioni di connessione e l'ID della sessione del giocatore per connettersi direttamente al processo del server di gioco e chiedere di partecipare alla sessione di gioco.

  5. In risposta a un tentativo di accesso al client di gioco, il processo del server di gioco richiama il servizio API operativo AcceptPlayerSession() per convalidare l'ID di sessione del giocatore. Il processo server accetta o rifiuta la connessione.

  6. Il GameLift servizio Amazon esegue una delle seguenti operazioni:

    1. Se la connessione viene accettata, Amazon GameLift imposta lo PlayerSession stato su ACTIVE e lo trasmette PlayerSession al server di gioco.

    2. Se il processo del server di gioco non richiede AcceptPlayerSession() l'ID della sessione del giocatore entro un certo periodo di tempo dalla CreatePlayerSession() richiesta originale, il GameLift servizio Amazon modifica lo PlayerSession stato TIMEDOUT e riapre lo slot del giocatore nella sessione di gioco.

Rimuovere un giocatore

Per i giochi che utilizzano sessioni di gioco, il processo del server di gioco notifica al GameLift servizio Amazon quando un giocatore si disconnette. Il servizio utilizza queste informazioni per tenere traccia dello stato degli slot dei giocatori in una sessione di gioco e può consentire ai nuovi giocatori di utilizzare gli slot aperti.

  1. Un giocatore si disconnette dalla sessione di gioco.

  2. Il processo del server di gioco rileva la connessione persa e richiama l'operazione del serverSDK. RemovePlayerSession()

  3. Il GameLift servizio Amazon modifica lo stato della sessione del giocatore COMPLETED e riapre lo slot del giocatore nella sessione di gioco.

Chiusura della sessione di gioco

Al termine di una sessione di gioco o quando si chiude la sessione di gioco, il processo del server notifica al GameLift servizio Amazon lo stato della sessione di gioco.

  1. Il processo del server di gioco termina la sessione di gioco e avvia l'arresto del processo richiamando l'operazione del server. SDK ProcessEnding()

  2. Il GameLift servizio Amazon esegue le seguenti operazioni:

    1. Carica i log delle sessioni di gioco su Amazon Simple Storage Service (Amazon S3).

    2. Cambia lo stato della sessione di gioco in. TERMINATED

    3. Modifica lo stato del processo del server inTERMINATED.

    4. A seconda di come è progettata la soluzione di hosting, le nuove risorse di hosting disponibili vengono allocate per eseguire un nuovo processo del server di gioco.