- Azure PlayFab Party クライアント間通信では、PlayFab Party API の使用を推奨します。XBOX One Software Development Kit の Secure Sockets と類似の機能を提供します。これらの API は、セキュアな通信、通信リレーを介した Network Address Translation (NAT) トラバーサル、ボイスおよびテキスト チャット機能も提供します。
- Datagram Transport Layer Security (DTLS)
タイトルは DTLS を使用してパケット ペイロードを暗号化することも選択できます。タイトルはこれを
OpenSSLまたはBcryptAPI を使って実装するか、そのような実装をカプセル化するミドルウェアを利用できます。すべての通信は内容にかかわらず、タイトル サービスを通じて暗号化・認証されなければなりません。このソリューションの要件の詳細については、Microsoft Game Development Kit タイトル向けのセキュアなゲーム通信 を参照してください。
Microsoft Game Development Kit (GDK) タイトル バージョンと XBOX One Software Development Kit タイトル バージョン間の通信
Microsoft は、すべての XBOX コンソール ハードウェアで GDK を使用することを推奨しています。これにより、統一されたネットワーク実装を利用できます。特定のシナリオでは、XBOX One Software Development Kit と GDK のタイトル バージョン間でネットワーク通信をサポートしたい場合もあります。 このシナリオでは、XBOX One Software Development Kit タイトルは Secure Sockets API を使用できません。これは、GDK の Azure PlayFab Party API とネットワーク互換ではないためです。Secure Socket 機能の上に構築された XIM API についても同様です。 XBOX One Software Development Kit タイトル バージョンで Secure Sockets や XIM を使用していたタイトルは、タイトルのネットワーク スタックを Azure PlayFab Party または DTLS 通信のいずれかに更新する必要があります。クライアント間のすべての通信ソリューションとしては Azure PlayFab Party を推奨します。Azure PlayFab Party はボイスおよびテキスト チャット機能も簡素化します。 XBOX One Software Development Kit タイトル バージョンで専用サーバーまたはリレー サーバーを使用しているタイトルも、GDK タイトル バージョンとのネットワーク通信を可能にするため同様の対応が可能です。すべての通信プロトコルは、常に認証・保護され、セキュリティのベスト プラクティスに従う必要があります。ネットワーク初期化
Microsoft Game Development Kit (GDK) では、Game OS の起動プロセス中にできるだけ早くタイトルが起動されます。ハード ドライブからのアセットのロードを開始し、グラフィックス スタックの初期化を開始できます。つまり、ネットワーク サービスが起動する前にコードが実行されるため、Win32 のネットワーク API を安全に使用できない期間が発生します。この期間を ネットワーク初期化 期間と定義し、その後ネットワークは初期化済みとみなされます。ネットワーク初期化には通常数秒かかり、これはコード上で目立つほどの時間になりえます。 XBOX One ERA タイトルにおけるネットワーク初期化では、本来リアルタイム安全なWSAStartup や bind のようなネットワーク API を、暗黙的かつ任意にストールさせていました。Microsoft Game Development Kit (GDK) では、ネットワーク初期化は明示的な概念となり、Win32 のネットワーク API やセキュリティ API を使用するには、これと対話する必要があります。
Microsoft Game Development Kit (GDK) タイトルは、Winsock、WinHTTP、IP Helper、BCrypt、WinCrypt、Schannel、その他のネットワーク Win32 API を呼び出す前に、XNetworkingConnectivityHint::networkInitialized の Boolean 値が true に設定されるのを待たなければなりません。ネットワーク初期化前にこれらの API を呼び出すと、ランダムなプロセス クラッシュを含む不定な動作を引き起こします。
さらに、これと同じ概念はすべてのサスペンド/レジューム サイクルにも適用されます。サスペンド時、Microsoft Game Development Kit (GDK) タイトルはすべてのネットワーク ハンドルとセキュリティ ハンドルを閉じる必要があります。その後、Microsoft Game Development Kit (GDK) タイトルは、ネットワークの観点でレジューム ハンドラーを初回タイトル起動と同じように扱い、再びネットワークが初期化されるのを待つ必要があります。
ネットワーク初期化を待機する方法を示すコード例を含む詳細は、ネットワーク初期化と接続 を参照してください。
ポートの動作
XBOX One ERA タイトルでは、タイトルが実行するソケット フローすべてをネットワーク マニフェストで事前定義していました。Microsoft Game Development Kit (GDK) ではマニフェストは廃止されています。XBOX One コンソール上のポートは、Windows PC と同じように動作するようになりました。任意のポートでbind を呼び出せば、そのポートは Transmission Control Protocol (TCP) と User Datagram Protocol (UDP) の両方で、すべての送信トラフィックと応答としての受信トラフィックを許可します。要求されていない受信 UDP および TCP トラフィックはブロックされます。これは、TCP のピアツーピア ネットワーク トポロジーがもはや許可されないことを意味します。Microsoft Game Development Kit (GDK) タイトルは、ゲーム フローに UDP を使用してください。
Microsoft Game Development Kit (GDK) タイトルは、優先ローカル UDP マルチプレイヤー ポートに直接アクセスできるようにもなりました。このポートは、トラブルシューティングとユーザー構成に裏打ちされたプラットフォームが提供する、ピアやサーバーへのベストなポートを表します。全体的な接続成功率を高めるため、マルチプレイヤーやボイスのトラフィックはこのポートを使うよう調整することを強く推奨します。
ポートの動作の詳細については、XBOX コンソールのポート動作 および Preferred UDP multiplayer port を参照してください。
