Bereich erstellen

Auf dieser Seite wird erläutert, wie Sie Game Servers-Bereiche erstellen, auflisten und beschreiben. Ein Bereich ist eine benutzerdefinierte Gruppierung von Gameserver-Clustern, die auf den Latenzanforderungen des Spiels für die Anzahl an Spielern basiert.

Vorbereitung

Bevor Sie beginnen, sollten Sie sich mit den wichtigsten Konzepten in der Übersicht über Game Servers vertraut machen. Führen Sie außerdem die folgenden Aufgaben aus:

  • Prüfen Sie, ob die Game Services API aktiviert ist.
  • Game Services API aktivieren
  • Wählen Sie entweder eine Shell mit installiertem Cloud SDK aus oder verwenden Sie einen API-Client:
  • Cloud Shell

    So starten Sie Cloud Shell:

    1. Öffnen Sie die Google Cloud Console.

      Google Cloud Console

    2. Klicken Sie in der oberen rechten Ecke der Console auf die Schaltfläche Cloud Shell aktivieren:

    In einem Frame im unteren Teil der Console wird eine Cloud Shell-Sitzung geöffnet. Mit dieser Shell führen Sie gcloud-Befehle aus.

    Lokale Shell

    Installieren Sie zur Installation von gcloud das Cloud SDK. Darin ist das gcloud-Befehlszeilentool enthalten.

    Prüfen Sie, ob Sie das gewünschte Standardprojekt für das gcloud-Befehlszeilentool festgelegt haben. Andernfalls müssen Sie das Flag --project für jeden Befehl später explizit angeben:

    gcloud config list project
    

    Wenn Sie den folgenden Befehl nicht ausführen können, um ein Standardprojekt festzulegen, ersetzen Sie project-id durch Ihre gewünschte Projekt-ID:

    gcloud config set project project-id
    

    Führen Sie den folgenden Befehl aus, um Ihre Version des Google Cloud SDK zu prüfen. Für Game Servers ist Version 306.0.0 oder höher des SDK erforderlich.

    gcloud version
    

    Aktualisieren Sie Ihre Installation mit dem folgenden Befehl:

    gcloud components update
    

    Clientbibliothek

    Google Cloud Game Servers können mithilfe einer Clientbibliothek programmatisch gesteuert werden. Wie Sie die Bibliothek und die Authentifizierung verwenden, erfahren Sie in der Übersicht zu Clientbibliotheken.

Bereich erstellen

Bereiche können global oder regional sein. Ein globaler Bereich ist eine gute Option, wenn die in einem Bereich registrierten Cluster aus Regionen stammen, die sich über verschiedene geografische Standorte erstrecken, z. B. Nordamerika und Südamerika oder Europa und Asien. Ein regionaler Bereich ist eine gute Option, wenn sich Cluster in derselben Region befinden, z. B. Westeuropa. Bei einem Netzwerkausfall zwischen Regionen kann ein globaler Bereich Cluster möglicherweise nicht in jeder Region verwalten. Um die Ausfallsicherheit zwischen Regionen zu erhöhen, sollten Sie regionale Bereiche in Regionen erstellen, die den entsprechenden Gameserver-Clustern so nah wie möglich sind.

Wenn Sie beispielsweise Cluster in den Regionen europe-west1, europe-west2 und europe-west3 erstellen, um Nutzer in Westeuropa zu bedienen, können Sie auch einen regionalen Bereich in einer dieser Regionen erstellen. Mit dieser Konfiguration kann der Bereich weiter Cluster verwalten, falls diese Regionen aufgrund eines Netzwerkausfalls nicht aus Regionen in anderen Teilen der Welt erreicht werden können.

Wenn Sie nicht sicher sind, wo Sie Ihren Bereich erstellen sollten, können Sie ihn als globalen Bereich erstellen. Wenn sich Ihre Anforderungen ändern, können Sie einen neuen Bereich in einer Region erstellen, die näher an den zu verwaltenden Clustern liegt. Anschließend können Sie vorhandene Cluster in den neuen regionalen Bereich verschieben, indem Sie die Cluster aus dem globalen Bereich löschen und abmelden und anschließend im neuen regionalen Bereich registrieren.

gcloud-Befehl

Sie können Bereiche mit dem gcloud-Befehlszeilentool erstellen. Führen Sie zum Erstellen eines globalen Bereichs den folgenden Befehl aus und ersetzen Sie die Platzhalterwerte wie realmID durch die entsprechenden Werte:

gcloud game servers realms create realmID --time-zone tz

Führen Sie den folgenden Befehl aus, um einen regionalen Bereich zu erstellen und ersetzen Sie die Platzhalterwerte wie realmID durch die entsprechenden Werte:

gcloud game servers realms create realmID --time-zone tz --location=region

Die Variablenplatzhalter entsprechen den folgenden Beschreibungen:

  • realmID ist eine eindeutige Kennung, die Sie für diesen Bereich angeben können.
  • tz ist die Zeitzone für diesen Bereich. Wenn Sie zeitbasierte Ereignisse wie Skalierungsrichtlinien planen, gilt das für diese Zeitzone.
  • region ist die Region für den Bereich. Wenn Sie fehlerhafte Domains steuern möchten, geben Sie eine Region an. Wir empfehlen Ihnen, einen globalen Bereich zu erstellen und diese Option auszulassen.

Go


import (
	"context"
	"fmt"
	"io"

	gaming "cloud.google.com/go/gaming/apiv1"
	gamingpb "google.golang.org/genproto/googleapis/cloud/gaming/v1"
)

// createRealm creates a game server realm.
func createRealm(w io.Writer, projectID, location, realmID string) error {
	// projectID := "my-project"
	// location := "global"
	// realmID := "myrealm"
	ctx := context.Background()
	client, err := gaming.NewRealmsClient(ctx)
	if err != nil {
		return fmt.Errorf("NewRealmsClient: %v", err)
	}
	defer client.Close()

	req := &gamingpb.CreateRealmRequest{
		Parent:  fmt.Sprintf("projects/%s/locations/%s", projectID, location),
		RealmId: realmID,
		Realm: &gamingpb.Realm{
			TimeZone:    "US/Pacific",
			Description: "My Game Server Realm",
		},
	}

	op, err := client.CreateRealm(ctx, req)
	if err != nil {
		return fmt.Errorf("CreateRealm: %v", err)
	}
	resp, err := op.Wait(ctx)
	if err != nil {
		return fmt.Errorf("Wait: %v", err)
	}

	fmt.Fprintf(w, "Realm created: %v", resp.Name)
	return nil
}

Node.js

const {RealmsServiceClient} = require('@google-cloud/game-servers');

const client = new RealmsServiceClient();

async function createRealm() {
  /**
   * TODO(developer): Uncomment these variables before running the sample.
   */
  // const projectId = 'Your Google Cloud Project ID';
  // const location = 'A Compute Engine region, e.g. "us-central1"';
  // const realmId = 'A unique identifier for the realm';
  const request = {
    parent: `projects/${projectId}/locations/${location}`,
    realmId: realmId,
    realm: {
      // Must use a supported time zone name.
      // See https://cloud.google.com/dataprep/docs/html/Supported-Time-Zone-Values_66194188
      timeZone: 'US/Pacific',
      description: 'My Game Server realm',
    },
  };

  const [operation] = await client.createRealm(request);
  const results = await operation.promise();
  const [realm] = results;

  console.log('Realm created:');

  console.log(`\tRealm name: ${realm.name}`);
  console.log(`\tRealm description: ${realm.description}`);
  console.log(`\tRealm time zone: ${realm.timeZone}`);
}

createRealm();

Python

def create_realm(project_id, location, realm_id):
    """Creates a realm."""

    client = gaming.RealmsServiceClient()

    request = realms.CreateRealmRequest(
        parent=f"projects/{project_id}/locations/{location}",
        realm_id=realm_id,
        realm=realms.Realm(
            description="My Realm",
            time_zone="US/Pacific",
        ),
    )

    operation = client.create_realm(request)
    print(f"Create realm operation: {operation.operation.name}")
    operation.result(timeout=120)

Bereiche auflisten

gcloud-Befehl

Mit dem gcloud-Befehlszeilentool können Sie globale oder regionale Bereiche auflisten.

Führen Sie den folgenden Befehl aus, um sowohl globale als auch regionale Bereiche aufzulisten:

gcloud game servers realms list

Führen Sie den folgenden Befehl aus und ersetzen Sie region durch global oder eine Google Cloud-Region, um Bereiche an einem bestimmten Standort aufzulisten:

gcloud game servers realms list --location=region

Go


import (
	"context"
	"fmt"
	"io"

	gaming "cloud.google.com/go/gaming/apiv1"
	"google.golang.org/api/iterator"
	gamingpb "google.golang.org/genproto/googleapis/cloud/gaming/v1"
)

// listRealms lists the realms in a location.
func listRealms(w io.Writer, projectID, location string) error {
	// projectID := "my-project"
	// location := "global"
	ctx := context.Background()
	client, err := gaming.NewRealmsClient(ctx)
	if err != nil {
		return fmt.Errorf("NewRealmsClient: %v", err)
	}
	defer client.Close()

	req := &gamingpb.ListRealmsRequest{
		Parent: fmt.Sprintf("projects/%s/locations/%s", projectID, location),
	}

	it := client.ListRealms(ctx, req)
	for {
		resp, err := it.Next()
		if err == iterator.Done {
			break
		}
		if err != nil {
			return fmt.Errorf("Next: %v", err)
		}

		fmt.Fprintf(w, "Realm listed: %v\n", resp.Name)
	}

	return nil
}

Node.js

const {RealmsServiceClient} = require('@google-cloud/game-servers');

const client = new RealmsServiceClient();

async function listRealms() {
  /**
   * TODO(developer): Uncomment these variables before running the sample.
   */
  // const projectId = 'Your Google Cloud Project ID';
  // const location = 'A Compute Engine region, e.g. "us-central1"';
  const request = {
    parent: `projects/${projectId}/locations/${location}`,
  };

  const [results] = await client.listRealms(request);
  for (const realm of results) {
    console.log(`Realm name: ${realm.name}`);
    console.log(`Realm description: ${realm.description}`);
    console.log(`Realm time zone: ${realm.timeZone}`);

    const createTime = realm.createTime;
    const createDate = new Date(createTime.seconds * 1000);
    console.log(`Realm created on: ${createDate.toLocaleDateString()}\n`);
  }
}

listRealms();

Python



def list_realms(project_id, location):
    """Lists the existing realms."""

    client = gaming.RealmsServiceClient()

    response = client.list_realms(
        parent=f"projects/{project_id}/locations/{location}"
    )

    for realm in response.realms:
        print(f"Name: {realm.name}")

    return response.realms

Bereiche beschreiben

gcloud-Befehl

Mit dem gcloud-Befehlszeilentool können Sie Details zu einem Bereich wie den Erstellungszeitpunkt oder die Zeitzone abrufen.

Führen Sie den folgenden Befehl aus, um einen globalen Bereich zu beschreiben, und ersetzen Sie realmID durch die ID für einen von Ihnen erstellten Bereich:

gcloud game servers realms describe realmID

Wenn Sie einen oder mehrere Bereiche erstellt haben, die nicht global sind, können Sie Details eines Bereichs in einer bestimmten Region beschreiben. Zum Beschreiben eines Bereichs in einer Region ersetzen Sie realmID durch die ID für einen von Ihnen erstellten Bereich und region durch die Region, in dem sich der Bereich befindet:

gcloud game servers realms describe realmID --location=region

Go


import (
	"context"
	"fmt"
	"io"

	gaming "cloud.google.com/go/gaming/apiv1"
	gamingpb "google.golang.org/genproto/googleapis/cloud/gaming/v1"
)

// getRealm retrieves info on a realm.
func getRealm(w io.Writer, projectID, location, realmID string) error {
	// projectID := "my-project"
	// location := "global"
	// realmID := "myrealm"
	ctx := context.Background()
	client, err := gaming.NewRealmsClient(ctx)
	if err != nil {
		return fmt.Errorf("NewRealmsClient: %v", err)
	}
	defer client.Close()

	req := &gamingpb.GetRealmRequest{
		Name: fmt.Sprintf("projects/%s/locations/%s/realms/%s", projectID, location, realmID),
	}

	resp, err := client.GetRealm(ctx, req)
	if err != nil {
		return fmt.Errorf("GetRealm: %v", err)
	}

	fmt.Fprintf(w, "Realm retrieved: %v", resp.Name)
	return nil
}

Node.js

const {RealmsServiceClient} = require('@google-cloud/game-servers');

const client = new RealmsServiceClient();

async function getRealm() {
  /**
   * TODO(developer): Uncomment these variables before running the sample.
   */
  // const projectId = 'Your Google Cloud Project ID';
  // const location = 'A Compute Engine region, e.g. "us-central1"';
  // const realmId = 'Unique identifier of the realm';
  const request = {
    // Realm name is the full resource name including project ID and location
    name: client.realmPath(projectId, location, realmId),
  };

  const [realm] = await client.getRealm(request);
  console.log(`Realm name: ${realm.name}`);
  console.log(`Realm description: ${realm.description}`);
  console.log(`Realm time zone: ${realm.timeZone}`);

  const createTime = realm.createTime;
  const createDate = new Date(createTime.seconds * 1000);

  console.log(`Realm created on: ${createDate.toLocaleDateString()}`);
}

getRealm();

Python

def get_realm(project_id, location, realm_id):
    """Gets a realm."""

    client = gaming.RealmsServiceClient()

    request = realms.GetRealmRequest(
        name=f"projects/{project_id}/locations/{location}/realms/{realm_id}",
    )

    response = client.get_realm(request)
    print(f"Get realm response:\n{response}")
    return response

Weitere Informationen