WinHttp 是新的 Win32 HTTP API,可取代 IXMLHttpRequest2 (IXHR2) 和 IMessageWebSocket API。WinHttp 是比 IXHR2 更低階的 API,因此與 IXHR2 相比缺少一些功能,例如內容快取、Cookie、自動插入 XBOX services 權杖,以及自動強制執行安全性。相對地,WinHttp 因為在處理程序內執行、額外負荷較少,並且避免過多的記憶體複製,所以效能更高。此外,WinHttp 在單一 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) 還提供簡單的 http_call API 集合,可供您用來對自己的自訂伺服器發出 REST HTTP 要求。我們建議對遊戲向您自己的服務及 XBOX services 發出的任何 REST 要求使用 XSAPI。
如需 XSAPI 的詳細資訊,請參閱開始使用 XBOX Services API。
GDK 包含一個 SimpleWinHttp 範例,可將 WinHTTP 的使用方式抽象化為簡單的 Microsoft Game Development Kit (GDK) 非同步模型。我們建議您以此範例作為自己 WinHTTP 實作的起點,因為它涵蓋了建置安全且穩固的 WinHTTP 整合所涉及的許多細節。
如需如何使用 XCurl 或 WinHttp 的詳細資訊,請參閱 HTTP 和 Web 通訊端。
網路初始化
您的遊戲會在 Game OS 啟動過程中盡早啟動。您可以開始從硬碟載入資產,並開始初始化圖形堆疊。不過,您的程式碼會在網路服務啟動之前就開始執行,因此會有一段期間無法安全地使用 Win32 網路 API。我們將這段期間定義為網路初始化期間,在此之後,網路才會被視為已初始化。網路初始化通常需要幾秒鐘,這在您的程式碼中可能會很明顯。 XBOX One ERA 遊戲的網路初始化會隱含且任意地讓原本具即時安全性的網路 API (例如WSAStartup 或 bind) 停滯。在 Microsoft Game Development Kit (GDK) 應用程式中,網路初始化現在是一個明確的概念,您必須與之互動,才能使用任何 Win32 網路或安全性 API。
Microsoft Game Development Kit (GDK) 遊戲必須等到 XNetworkingConnectivityHint::networkInitialized 布林值設為 true 後,才能呼叫 Winsock、WinHttp、IP Helper、BCrypt、WinCrypt、Schannel 中的任何網路 API,或任何其他 Win32 網路 API。在網路初始化之前呼叫這些 API 中的任何一個,都會導致不確定的行為,甚至可能導致處理程序隨機當機。
此外,相同的概念也適用於所有暫停/繼續循環。暫停時,Microsoft Game Development Kit (GDK) 遊戲應關閉所有網路和安全性控制代碼。接著,從網路的角度來看,Microsoft Game Development Kit (GDK) 遊戲應將繼續處理常式視同遊戲初次啟動,並再次等待網路完成初始化。
如需詳細資訊 (包括示範如何等待網路初始化的程式碼範例),請參閱網路初始化和連線能力。
