Skip to main content
本文介绍 Microsoft 游戏开发工具包 (GDK) 与 XBOX One Software Development Kit 之间 Web 请求 API 的差异。WinHttp 是取代 IXMLHttpRequest2 (IXHR2) 和 IMessageWebSocket API 的新 Win32 HTTP API。WinHttp 是比 IXHR2 更底层的 API,因此相较 IXHR2 缺少一些功能,例如内容缓存、cookies、自动插入 XBOX 服务令牌以及自动安全强制。但作为回报,WinHttp 由于位于进程内、开销更小并避免过多内存拷贝,性能要好得多。此外,WinHttp 在同一 API 中支持 HTTP/1.1、HTTP/2 和 WebSockets,并包含 IXHR2 缺少的功能,例如分块上传。 XCurl 是 Microsoft 游戏开发工具包 (GDK) 的 HTTP API。XCurl 通过在 WinHttp 之上封装的适配器提供更简单的 API。XCurl 的 API 面与 libCurl 大致相符。XCurl 自动处理安全最佳实践并处理网络初始化,从而简化了游戏开发。 WinHttp 外,XBOX Services API (XSAPI) 提供了简单的 http_call 系列 API,可用于向你自己的自定义服务器发起 REST HTTP 请求。我们建议对你游戏发向自有服务和 XBOX 服务的任何 REST 请求使用 XSAPI。 有关 XSAPI 的更多信息,请参阅 XBOX 服务 API 入门 GDK 包含一个 SimpleWinHttp 示例,它将 WinHTTP 使用抽象为简单的 Microsoft 游戏开发工具包 (GDK) 异步模型。我们建议以此示例作为你自有 WinHTTP 实现的起点,因为它涵盖了构建安全、健壮的 WinHTTP 集成所涉及的许多细节。 有关如何使用 XCurlWinHttp 的更多信息,请参阅 HTTP 与 Web sockets

网络初始化

你的游戏会在 Game OS 启动过程中尽可能早地启动。你可以开始从硬盘加载资源并开始初始化图形堆栈。但你的代码在网络服务启动之前就在运行,因此在一段时间内使用 Win32 网络 API 是不安全的。我们将此时间段定义为 网络初始化 期,之后网络被视为已初始化。网络初始化通常需要几秒钟,这在你的代码中可能会很明显。 在 XBOX One ERA 游戏中,网络初始化会隐式且任意地阻塞本应实时安全的网络 API,例如 WSAStartupbind。在 Microsoft 游戏开发工具包 (GDK) 应用中,网络初始化现在是一个显式概念,你必须与之交互才能使用任何 Win32 网络或安全 API。 Microsoft 游戏开发工具包 (GDK) 游戏必须等待 XNetworkingConnectivityHint::networkInitialized 布尔值被设为 true 后,再调用 WinsockWinHttpIP HelperBCryptWinCryptSchannel 或任何其他 Win32 网络 API。在网络初始化完成前调用其中任一 API 会导致不确定的行为,甚至可能出现随机的进程崩溃。 此外,同样的概念适用于所有挂起/恢复周期。挂起时,Microsoft 游戏开发工具包 (GDK) 游戏应关闭所有网络和安全句柄。从网络角度看,Microsoft 游戏开发工具包 (GDK) 游戏应像初次启动一样处理恢复处理程序,再次等待网络完成初始化。 有关等待网络初始化的代码示例等更多信息,请参阅 网络初始化与连接性

另请参阅

网络初始化与连接性 通信安全概述 XBOX 服务 API 入门 http_call_c
最后修改于 2026年8月24日