WinHttp は、IXMLHttpRequest2 (IXHR2) および IMessageWebSocket API を置き換える新しい Win32 HTTP API です。WinHttp は IXHR2 よりも低レベルの API であるため、コンテンツ キャッシュ、Cookie、XBOX サービス トークンの自動挿入、自動セキュリティ強制など、IXHR2 に比べて欠けている機能もあります。その代わり、WinHttp はイン プロセスで動作し、オーバーヘッドが小さく、過度なメモリ コピーを避けることで、はるかに高いパフォーマンスを発揮します。また、WinHttp は 1 つの API で HTTP/1.1、HTTP/2、および WebSockets をサポートしており、チャンク アップロードなど IXHR2 にない機能も備えています。
XCurl は Microsoft Game Development Kit (GDK) 向けの HTTP API です。XCurl は、WinHttp の上に置かれるアダプター経由で、よりシンプルな API を提供します。XCurl の API 表面は libCurl と広範に一致します。XCurl はセキュリティのベスト プラクティスの処理とネットワーク初期化の処理を自動化することで、タイトル開発を簡素化します。
WinHttp に加えて、XBOX Services API (XSAPI) は、独自のカスタム サーバーに対して REST HTTP リクエストを行うためのシンプルな http_call API セットを提供します。タイトルが独自サービスや XBOX サービスに対して行う REST リクエストには XSAPI の使用を推奨します。
XSAPI の詳細は、XBOX Services API の入門 を参照してください。
GDK には、WinHTTP の使用をシンプルな Microsoft Game Development Kit (GDK) 非同期モデルに抽象化した SimpleWinHttp サンプル が含まれています。セキュアで堅牢な WinHTTP 統合を構築する際に関わる多くの詳細をカバーしているため、独自の WinHTTP 実装の出発点として利用することを推奨します。
XCurl および WinHttp の使い方の詳細については、HTTP と Web Socket を参照してください。
ネットワーク初期化
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) タイトルは、ネットワークの観点でレジューム ハンドラーを初回タイトル起動と同じように扱い、再びネットワークが初期化されるのを待つ必要があります。
ネットワーク初期化を待機する方法を示すコード例を含む詳細は、ネットワーク初期化と接続 を参照してください。
