Realtime サーバーの仕組み - Amazon GameLift

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Realtime サーバーの仕組み

このトピックでは、マネージドされた Amazon の概要を提供します。 GameLift Realtime サーバーソリューションを使用します。ここでは、どのような場合にゲームに適しているか、Realtime サーバーがどのようにマルチプレイヤーゲームをサポートしているかについて説明します。その他の詳細を確認するトピック GameLift ソリューション、「」を参照してください。Amazon GameLiftとは

Realtime サーバーとは

リアルタイムサーバーは軽量で、 ready-to-go そのゲームサーバー GameLift では、マルチプレイヤーゲームで使用することができます。多くのゲームは複雑な物理と計算を処理するためにカスタムゲームサーバーを必要としますが、ゲームによってはこれは必要ありません。Realtime サーバーではカスタムゲームサーバーの開発、テスト、デプロイが不要になるため、このソリューションを選択すると、ゲームの完成までにかかる時間と労力を最小限に抑えることができます。

主な特徴は以下のとおりです。

  • ゲームクライアントとサーバーのやり取りのための完全なネットワークスタック Realtime サーバーは、メッセージングに TCP および UDP チャネルを使用します。TLS 証明書を有効にすることで、組み込みのサーバー認証とデータパケット暗号化を使用することもできます。

  • ゲームサーバーの主な機能。Realtime サーバーは、ゲームセッションを開始および停止し、ゲームとマッチデータを管理し、クライアント接続を受け入れます。ゲームサーバーは、各クライアントからゲーム状態情報を受信し、それをゲームセッションの他のクライアントに中継することで、同期されたゲームセッション状態を維持します。

  • との統合 GameLift サービスサービス。リアルタイムサーバは、 GameLift サービス。このサービスは、Realtime サーバーにゲームセッションを開始し、プレイヤーを接続時に検証し、ゲームサーバーからプレイヤーの接続ステータスとゲームのヘルスステータスを収集するように指示します。

  • カスタマイズ可能なサーバーロジック。Realtime サーバーを設定し、ゲームに最適なサーバー側のゲームロジックでカスタマイズできます。または、最小限の設定により、シンプルな Relay サーバーとして使用します。Realtime サーバーのカスタマイズ の詳細を確認してください。

  • Realtime 設定およびサーバーロジックへライブ更新。Realtime サーバー設定はいつでも更新できます。 GameLift 更新された設定スクリプトを定期的にチェックし、フリートにデプロイします。

  • コンピューティングリソースオプションの範囲。Realtime サーバーは Linux で実行されます。フリートのコンピューティングハードウェアのタイプを選択し、スポットインスタンスまたはオンデマンドインスタンスのどちらを使用するかも選択します。

  • FlexMatch マッチメーキング。Realtime サーバーを使用するゲームクライアントは、すべてを利用できます。 FlexMatch 大規模なマッチを含むマッチメーキング機能

  • ホスティングリソースの柔軟な制御。Realtime Server でデプロイされるゲームでは、すべて使用できます。 GameLift auto-scaling、マルチリージョンキュー、FleetIQ を使用したゲームセッションの配置、ゲームセッションのログ記録、メトリクスなど、管理機能。ホスティングリソースの使用方法を決定します。

フリートを作成し、設定スクリプトを提供することで、Realtime サーバーを設定します。Realtime サーバーの作成とゲームクライアントの準備方法の詳細については、「リアルタイムサーバーの使用を開始する」で説明しています。

ゲームの Realtime サーバーの選択

カスタムゲームサーバーを構築する代わりに Realtime サーバーを選択するかどうかは主に、サーバーの複雑さに対するゲームのニーズによって決まります。Realtime サーバーは、より軽量のゲームやゲームクライアントでの計算処理のより大部分を管理するゲームに最適です。例としては、メッセージングゲーム、ターンベースの戦略ゲーム、さまざまなモバイルゲームが挙げられます。

主要コンポーネント

Realtime サーバーを使用するときは、以下のコンポーネントを使用します。これらのコンポーネントの詳細と、「Realtime サーバーを使用したゲームアーキテクチャ」でそれらがどのように連携するかについて確認してください。

  • あるRealtime サーバーゲームにクライアントおよびサーバーネットワークを提供します。によって通知されると、ゲームセッションが開始されます。 GameLift サービスでは、接続時にプレイヤーの検証をリクエストして、プレイヤーの接続ステータスとゲームのヘルスステータスをレポートします。サーバーは、接続されているすべてのプレイヤー間でゲーム状態データを中継し、提供されていればカスタムゲームロジックを実行します。

  • ゲームクライアントは、プレイヤーのデバイスで実行されるゲームのソフトウェアです。バックエンドサービスを通じてゲームクライアントは、 GameLift サービスにより、参加するゲームセッションを見つけるか新しいセッションを開始するためのサービスで、Realtime サーバーに接続してゲームに参加します。接続されると、ゲームクライアントは Realtime サーバーを介して、ゲーム内の他のプレイヤーとデータを送受信できます。

  • Realtime スクリプトは、ゲームの構成設定とオプションのカスタムゲームロジックを提供します。スクリプトには、最小限の構成設定またはより複雑なゲームロジックが含まれる場合があります。 GameLift は、新しいホスティングリソースを起動するときに Realtime サーバーとともにRealtime スクリプトをデプロイします。スクリプトは Node.js ベースの JavaScript で記述します。

  • GameLift サービスは、Realtime サーバーをホストするのに必要なコンピューティングリソースを管理し、プレイヤーがゲームに接続できるようにします。また、このサービスは、プレイヤーの需要に応じてリソースの数を調整します。アクティブなゲームセッションでプレイヤースロットを見つけて予約することで、プレイヤー参加リクエストを処理します。サーバーをトリガーしてゲームセッションを開始します。プレイヤーがゲームサーバーに接続するときにプレイヤーを検証します。さらに、このサービスは、Realtime サーバーのヘルスとプレイヤーの使用状況に関するメトリクスを収集します。

  • バックエンドサービスは、GameLift に関連するタスクを処理する追加のカスタムサービスです。ベストプラクティスとして、バックエンドサービスは、ゲームクライアントとのすべての通信を処理します GameLift サービスサービス。バックエンドサービスを使用して、セキュリティと効率を高めます。

  • ゲームセッションは、Realtimeサーバーで実行されるゲームのインスタンスです。プレイヤーは、ゲームセッションに接続して、ゲームのプレイや、他のプレイヤーとのやり取りを行います。

Realtime サーバーがどのようにゲームセッションを管理するか

GameLift は、完全にカスタマイズされたゲームサーバーで処理するのと同じ方法で Realtime サーバーでゲームセッションを管理します。プレイヤーは、ゲームクライアントを使用して、新しいゲームセッションを作成したり、既存のゲームセッションを見つけて参加したりするリクエストを送信します。ゲームセッションの配置など、ゲームセッションを作成するほとんどの方法 FlexMatch マッチメーキングは、Realtime サーバーで使用することができます (マッチバックフィルは使用できません)。

Realtime スクリプトに組み込んで、ゲームセッション管理用のカスタムロジックを追加できます。サーバー固有のオブジェクトへのアクセスや、コールバックを使用したイベント駆動型ロジックの追加、イベント以外のシナリオ (タイマーやステータスチェックなど) に基づくロジックの追加を行うコードを記述できます。たとえば、ゲームセッションの開始または終了時にゲームセッションオブジェクトにアクセスしてアクションを開始できます。

リアルタイムクライアントとサーバーのやりとり方法

ゲームセッション中、ゲーム内のゲームクライアントはメッセージングによってやり取りします。ゲームクライアントはメッセージを使用して、アクティビティ、ゲーム状態、関連するゲームデータを交換します。ゲームクライアントは、バックエンドサービスを介して Realtime サーバーに送信し、そのサーバーはゲームクライアント間でメッセージを中継します。ゲームクライアントはRealtime クライアント SDK を使用してサーバーおよびバックエンドサービスと通信します。この SDK はゲームクライアントに統合されています。Client SDK は、クライアントがゲームに接続し、メッセージを送受信し、ゲームから切断することを可能にする、一連の同期 API コールを定義しています。また、ゲームクライアントで特定のイベントに応答するために実装可能な、一連の非同期コールバックを定義しています。

さらに、ゲームロジックを Realtime スクリプトに追加することで、クライアントとサーバーのやり取り方法をカスタマイズできます。カスタムゲームロジックにより、Realtime サーバーはイベント駆動型レスポンスを開始するためのコールバックを実装できます。たとえば、プレイヤーがアチーブメントに到達したことをサーバーに通知すると、サーバーはメッセージを他のゲームクライアントに送信して、アナウンスを表示します。

通信プロトコル

Realtime サーバーと接続されたゲームクライアントとの通信では、2 つのチャネルとして、確実な配信のための TCP 接続と迅速な配信のための UDP チャネルが使用されます。メッセージを作成するときは、メッセージのタイプに応じて使用するプロトコルを選択します。メッセージ配信はデフォルトで UDP に設定されています。UDP チャンネルが利用できない場合は、 GameLift TCP をフォールバックとして使用してメッセージを送信します。

メッセージの内容

メッセージの内容は、必須のオペレーションコード (opCode) とオプションのペイロードの 2 つの要素で構成されています。必要に応じて、ペイロードがオペレーションコードに関連する追加のデータを提供している間、メッセージの opCode は特定のプレイヤーの活動やゲームイベントを識別します。これらの要素はどちらも開発者定義です。rgame クライアントは、受信したメッセージ内の opCodes に基づいてアクションを実行します。

プレイヤーグループ

Realtime サーバーはプレイヤーのグループを管理する機能を提供します。デフォルトでは、次にようになります。 GameLift ゲームに接続したすべてのプレイヤーを「すべてのプレイヤー」グループに配置します。さらに、開発者は自分のゲームに他のグループを設定でき、プレイヤーは同時に複数のグループのメンバーになることができます。グループメンバーは、グループ内のすべてのプレイヤーにメッセージを送信したり、グループとゲームデータを共有したりできます。グループの用途の 1 つは、プレイヤーチームを設定し、チームのコミュニケーションを管理することです。

TLS 証明書を使用したRealtime サーバー

TLS 証明書の生成により Realtime サーバーフリートを作成することもできます。GameLift はフリートの TLS 証明書を生成し、フリート内の各インスタンスの DNS エントリを作成します。これにより、ゲームがクライアントサーバー接続を認証し、すべてのゲームクライアントサーバー通信を暗号化できます。この機能により、セキュリティの強化と通信の暗号化を必要とするモバイルなどのさまざまなプラットフォームで、ゲームを公開できます。AWS Certificate Manager(ACM) は追加料金なしでこれらのサービスを提供します。

Realtime サーバーでは、サーバー認証とデータパケット暗号化がすでにサービスに組み込まれており、TLS 証明書の生成をオンにすると有効になります。ゲームクライアントが Realtime サーバーに接続しようとすると、サーバーは TLS 証明書で自動的に応答します。この証明書はクライアントが検証します。 GameLift は、TCP (Websocket) 通信の TLS と UDP トラフィックの場合は DTLS を使用して暗号化を処理します。

Realtime サーバーのカスタマイズ

Realtime サーバーは、ステートレスな中継サーバーとして機能します。Realtime サーバーは、ゲームに接続されているゲームクライアント間でメッセージとゲームデータのパケットを中継しますが、メッセージの評価、データの処理、ゲームプレイロジックの実行は行われません。このように使用されると、各ゲームクライアントはゲーム状態の独自のビューを維持し、リレーサーバーを介して他のプレイヤーに更新情報を提供します。各ゲームクライアントは、これらの更新を組み込み、独自のゲーム状態を調整します。

Realtime スクリプト機能に追加することで、サーバーをカスタマイズできます。たとえば、ゲームロジックにより、サーバー権限によるゲームの状態の表示により、ステートフルなゲームを構築できます。

GameLift は、Realtime スクリプト用のサーバー側のコールバックセットを定義します。これらのコールバックを実装して、イベント駆動型の機能をサーバーに追加します。例えば、以下のことが可能です。

  • ゲームクライアントがサーバーに接続を試みるときにプレイヤーを認証します。

  • リクエスト時にプレイヤーがグループに参加できるかどうかを確認します。

  • 特定のプレイヤーからのメッセージまたはターゲットプレイヤーへのメッセージの配信タイミングを決定するか、それに応じて追加の処理を実行します。

  • プレイヤーがグループを離れるか、サーバーから切断されたときに、すべてのプレイヤーに通知します。

  • ゲームセッションオブジェクトまたはメッセージオブジェクトの内容を表示し、データを使用します。

Realtime サーバーのデプロイと更新

リアルタイムサーバーは以下によって駆動されます GameLift 専用のサーバーリソース。提供される安定性とセキュリティに違いはありません。すべてのサーバーと同様に、GameLift のマッチメーキングおよびキューを Fleet IQ で使用して、プレイヤーの位置に基づいてゲームセッションの配置を最適化することで、レイテンシーを最小限に抑えることができます。

Realtime サーバーの主な利点は、いつでもスクリプトを更新できることです。スクリプトを更新すると、 GameLift は、数分以内にすべてのホスティングリソースに新しいバージョンを配布します。After GameLift では、新しいスクリプトがデプロイされます。それ以降に作成されたすべての新しいゲームセッションでは新しいスクリプトバージョンが使用されます (既存のゲームセッションでは引き続き元のバージョンが使用されます)。