クライアントサーバー接続プロセス
Fusionのクライアントとサーバー間の接続プロセスは、信頼性があるP2P通信を確立するため、複数の段階に分かれています。その多くは、Photon CloudとSTUNサービスを使用したNAT(Network Address Translation)トラバーサル環境の実現です。主な目的は、ゲームセッションでピア間の直接接続を確立して、低レイテンシと高パフォーマンスを確保することです。
全体的なプロセスの概要
- セッションの初期化・作成・参加:
- サーバーピアは、Photon Cloudを使用して新しいセッションを作成します。
- クライアントは、Photon Cloudを通してセッションへの参加をリクエストします。
- ピア検出とリフレクシブアドレス交換:
- STUN(Session Traversal Utilities for NAT)プロトコルを使用して、クライアントとサーバーは、外部のSTUNサーバーからリフレクシブアドレス(外側のパブリックIPとポート)をリクエストします。これによって各ピアは、NATを超えて接続するために必須となる、パブリックなアドレスを識別できるようになります。
- その後、リフレクシブアドレス情報がピア間で共有され、大抵の場合では直接接続が可能になります。
- 接続の確立:
- リフレクシブアドレス情報を使用して、クライアントはサーバーへ接続を試みます。P2Pの直接接続が失敗した場合、接続はPhoton Cloudを通してリレーされます。
- サーバーは、直接のソケット(UDP)か、Photon Cloudを通したリレーからの、接続リクエストを待ち受けます。
- 接続に成功すると、クライアントとサーバーはゲームデータの交換を開始します。
- 接続失敗の処理:
- 接続試行があるしきい値を超えた場合、クライアントはネットワーク操作をシャットダウンし、接続試行を停止します。
- サーバーは、クライアントが接続に成功するかプロセスを停止するまで、直接またはリレー経由の接続を待ち受け続けます。
このプロセスによって、ネットワーク環境にかかわらず、クライアントとサーバーは確実に接続と通信ができるようになります。必要に応じて、直接接続とリレーサービスは組み合わせて使用されます。
コアコンポーネント
- STUNサービス:ピアにリフレクシブアドレス情報を提供し、NAT環境を通して直接接続を確立できるようにします。
- Photon Cloud:セッション作成を管理し、必要に応じたリレー接続試行と、ピア検出を補助します。
セッションの作成と参加
以下の図は、セッション作成とセットアップの全体的なフローを示しています。

- 1. サーバーは、Serverモードでゲームを開始する。
- 2. サーバーは、Photon Cloudを使用して新しいセッションを作成する。
- 3. Photon Cloudは、セッション作成を承認する。
- 4. サーバーは、参加リクエストプロトコルメッセージをPhoton Cloudに送信する。これは、Fusionのホストモード関連のカスタムプロパティでセッションをセットアップするために使用されます。
- 5. Photon Cloudは、参加リクエストを承認する。
- 6. Photon Cloudは、サーバーに開始リクエストを送信する。
- 7. サーバーを開始して、NetworkRunnerを初期化する。
- 8. サーバーは、ローカルネットワークアドレスを取得する処理を実行する。
- 9. サーバーは、STUNサーバーにSTUNリクエストを送信する。
- 10. サーバーは、STUNサーバーからリフレクシブアドレスを受信する。
- 11. サーバーは、Photon Cloudにリフレクシブアドレスを送信する。
以下の図は、クライアント参加プロセスを示します。

- 1. クライアントは、Clientモードでゲームを開始する。
- 2. クライアントは、Photon Cloudを使用してランダムなセッションへ参加を試みる。
- 3. Photon Cloudは、セッション参加を確認する。
- 4. クライアントは、参加リクエストプロトコルメッセージをPhoton Cloudに送信する。これは、セッションにクライアントを登録するために使用されます。
- 5. Photon Cloudは、参加リクエストを承認する。
- 6. Photon Cloudは、クライアントに開始リクエストを送信する。
- 7. クライアントを開始して、NetworkRunnerを初期化する。
- 8. クライアントは、ローカルネットワークアドレスを取得する処理を実行する。
- 9. クライアントは、STUNサーバーにSTUNリクエストを送信する。
- 10. クライアントは、STUNサーバーからリフレクシブアドレスを受信する。
- 11. クライアントは、Photon Cloudにリフレクシブアドレスを送信する。
接続プロセスフロー
以下の図は、Fusionのクライアントとサーバー間の接続プロセスの全体的なフローを示しています。以下のすべてのステップは、クライアントサーバー接続を試行する毎に実行されます。

段階的なプロセスは次の通りです。
- 1. Photon Cloudは、サーバーのリフレクシブアドレスをクライアントへ送信します。
- 2. Photon Cloudは、クライアントのリフレクシブアドレスをサーバーへ送信します。
並行して、クライアントとサーバーは以下のステップを実行します。
(クライアント側) 接続試行間隔ごとに以下を実行します。
- 3. 接続試行上限の2/3を超えていない場合、クライアントはリフレクシブアドレスを使用してサーバーに接続を試みます。
- 4. 上記を超えている場合、Photon Cloudへの接続リクエストを送信します。
- 5. Photon Cloudは、サーバーへの接続リクエストをリレーします。
- 6. 接続試行上限に達した場合、クライアントは接続試行を停止し、ネットワーク操作をシャットダウンします。
接続試行間隔は500ms固定で、接続試行上限は10に設定されています。
(サーバー側) 接続リクエストを待ち受け、以下のステップを実行します。
- サーバーは、クライアントのリフレクシブアドレスにUDPのpingパケットを送信します。これは、サーバーのローカルネットワークのルーターテーブルをクライアントのリフレクシブアドレスで更新するために使用されます。ルーターは未知のソースからの受信パケットをブロックすることがあるため、直接接続を確立するために必要になる場合があります。
この時点では2つの可能性が考えられます。
(a) クライアントがサーバーと直接通信できる場合:
- 8. サーバーは、デフォルトのソケットを通して、クライアントの接続リクエストを受け入れ、直接接続が確立されます。
- 9. クライアントは、サーバーへゲームデータの送信を開始します。
(b) Photon Cloudを通して通信がリレーされる場合:
- 10. サーバーは、Photon Cloudのリレーを通して、クライアントの接続リクエストを受け入れます。
- 11. Photon Cloudは、クライアントへ接続確認をリレーします。
- 12. クライアントは、Photon Cloudのリレーを通して、サーバーへゲームデータの送信を開始します。
- 13. サーバーは、Photon Cloudのリレーを通して、クライアントからゲームデータを受信します。
接続が確立されると、クライアントとサーバーは、直接またはPhoton Cloudのリレーを通して通信が可能になります。どちらになるかは、ネットワーク環境と直接接続試行が成功するかによります。
まとめ
Fusionのクライアントとサーバー間の接続プロセスは、信頼性のあるP2P通信を確立するための複数のメカニズムを含む多段階のプロセスです。Photon CloudとSTUNサービスを活用することで、NATトラバーサルを必要とする複雑なネットワーク環境においても、Fusionのクライアントとサーバーは、確実な接続と効率的な通信を行うことができます。
Back to top