WinHttp est la nouvelle API HTTP Win32 qui remplace les API IXMLHttpRequest2 (IXHR2) et IMessageWebSocket. WinHttp est une API de plus bas niveau qu’IXHR2 et ne dispose donc pas de certaines fonctionnalités d’IXHR2, telles que la mise en cache du contenu, les cookies, l’insertion automatique des jetons XBOX services et l’application automatique de la sécurité. En contrepartie, WinHttp est beaucoup plus performante, car elle s’exécute dans le processus, présente moins de surcharge et évite les copies de mémoire excessives. De plus, WinHttp prend en charge HTTP/1.1, HTTP/2 et WebSockets, le tout dans une seule API, et inclut des fonctionnalités absentes d’IXHR2, comme les chargements fragmentés.
XCurl est une API HTTP pour le Microsoft Game Development Kit (GDK). XCurl fournit une API plus simple au moyen d’un adaptateur sur WinHttp. La surface d’API de XCurl correspond globalement à libCurl. XCurl simplifie le développement des titres en appliquant automatiquement les bonnes pratiques de sécurité et en gérant l’initialisation du réseau.
En plus de WinHttp, l’API XBOX Services (XSAPI) fournit l’ensemble simple d’API http_call que vous pouvez utiliser pour effectuer des requêtes HTTP REST vers vos propres serveurs personnalisés. Nous vous recommandons d’utiliser XSAPI pour toutes les requêtes REST que votre titre envoie à vos propres services et aux XBOX services.
Pour plus d’informations sur XSAPI, consultez Prise en main des API XBOX Services.
Le GDK inclut un exemple SimpleWinHttp qui abstrait l’utilisation de WinHTTP dans un modèle asynchrone simple du Microsoft Game Development Kit (GDK). Nous vous recommandons d’utiliser cet exemple comme point de départ pour votre propre implémentation WinHTTP, car il couvre de nombreux détails liés à la création d’une intégration WinHTTP sécurisée et robuste.
Pour plus d’informations sur l’utilisation de XCurl ou WinHttp, consultez HTTP et sockets web.
Initialisation du réseau
Votre titre est démarré le plus tôt possible pendant le processus de démarrage du Game OS. Vous pouvez commencer à charger des ressources depuis le disque dur et à initialiser la pile graphique. Cependant, votre code s’exécute avant le démarrage des services réseau, ce qui entraîne une période pendant laquelle il n’est pas sûr d’utiliser les API réseau Win32. Nous appelons cette période la période d’initialisation du réseau, après laquelle le réseau est considéré comme initialisé. L’initialisation du réseau prend généralement quelques secondes, ce qui peut être perceptible dans votre code. Pour les titres ERA XBOX One, l’initialisation du réseau bloquait implicitement et arbitrairement des API réseau par ailleurs sûres en temps réel, telles queWSAStartup ou bind. Avec les applications Microsoft Game Development Kit (GDK), l’initialisation du réseau est désormais un concept explicite avec lequel vous devez interagir pour utiliser les API réseau ou de sécurité Win32.
Les titres Microsoft Game Development Kit (GDK) doivent attendre que le booléen XNetworkingConnectivityHint::networkInitialized soit défini sur true avant d’appeler une API réseau de Winsock, WinHttp, IP Helper, BCrypt, WinCrypt, Schannel ou toute autre API réseau Win32. L’appel de l’une de ces API avant l’initialisation du réseau entraîne un comportement indéterminé pouvant aller jusqu’à des plantages aléatoires du processus.
En outre, ce même concept s’applique à tous les cycles de suspension/reprise. Lors de la suspension, les titres Microsoft Game Development Kit (GDK) doivent fermer tous les handles réseau et de sécurité. Les titres Microsoft Game Development Kit (GDK) doivent ensuite traiter le gestionnaire de reprise de la même manière que le lancement initial du titre du point de vue réseau, et attendre à nouveau que le réseau soit initialisé.
Pour plus d’informations, notamment des exemples de code montrant comment attendre l’initialisation du réseau, consultez Initialisation et connectivité réseau.
