内容分发网络快速入门

重要

PlayFab CDN 是一种传统功能,至少支持一个以前配置过 CDN 的游戏帐户。 对于对内容管理解决方案感兴趣的 PlayFab 新开发人员,我们建议使用 Azure CDN。 要开始使用,请参阅 Azure CDN 文档

PlayFab 内容分发网络 (CDN) 将各个资源存储为由文件名(也称为)唯一标识的文件。 这意味着可按键添加、更新、删除和检索资源。

PlayFab CDN 允许按文件夹隔离资源。 资源的文件夹路径成为资源键的一部分。

以下示例是存储在名为 Android 的文件夹中的有效资源键。

Android/Image.png.

用户提取资源时,其请求会自动路由到最近的边缘位置,以便采用可能的最佳性能提供内容。

然而,这可能会将延迟引入到文件管理操作中(如以下示例中的操作):

  • 文件上传:文件将立即可用。

  • 文件覆盖:在用新文件覆盖之前,旧文件最多向用户显示 24 小时。

  • 文件删除:文件最多继续存在 24 小时,而 delete 命令会将其从所有边缘位置中移除。

上传资源

必须先将资源上传到 CDN,然后用户才能提取它。 这可以在 Game Manager 中完成:

  • 从左侧菜单中选择“Content”。
  • 选择“File Management”选项卡。
  • 然后选择“Upload Files”。

Game Manager - Content - File Management - Upload Files

可以:

  • 选择多个文件 (1)
  • 选择的每个文件都会出现在列表中 (2)
  • 通过选择“Upload Files”按钮 (3) 提交文件。

Game Manager - 选择并上传文件

  • 上传的文件会出现在列表中 (1)

  • 请注意,可能还要管理文件夹

    • 若要创建文件夹,请选择“New Folder”按钮 (2)
  • 填写 Folder name (1)

  • 选择“Create Folder”按钮 (2)

Game Manager - 新建文件夹

这会在树中创建新的文件夹。 然后可以选择此文件夹,并正常上传文件。

或者,可以使用管理 SDK,通过代码上传资产。 这是两步骤过程:

  1. 首先,调用 GetContentUploadUrl 并获取对上传进行授权的预签名 URL。
  2. 然后使用 URL 发出 HTTP PUT 请求,提供你的数据和(可选)内容类型。

可考虑使用下面提供的片段,其说明如何获取预签名 URL。

public void UploadFileToCDN(string key, byte[] content, string contentType = "binary/octet-stream") {
    GetUploadUrl(key, contentType, presignedUrl => {
        PutFile(presignedUrl, content, contentType);
    });
}

void GetUploadUrl(string key, string contentType, Action<string> onComplete) {
    PlayFabAdminAPI.GetContentUploadUrl(new GetContentUploadUrlRequest() {
        ContentType = contentType,
        Key = key
    }, result => onComplete(result.URL),
    error => Debug.LogError(error.GenerateErrorReport()));
}

void PutFile(string presignedUrl, byte[] content, string contentType = "binary/octet-stream") {
    // Implement your own PUT HTTP request here.
    // - Must use PUT method
    // - Must set content type Header
}

然后,可通过 PlayFab Game Manager 检查结果。 确保文件位于列表中。

提取资源

通过代码下载资源与上传资源相同。 如前所述,此过程需要两个步骤。

  1. 首先,调用 GetContentDownloadUrl 并获取对下载进行授权的预签名 URL。
  2. 然后,使用预签名 URL 发出 HTTP GET 请求并提取数据。

请考虑使用下面提供的片段,其演示过程的基本内容。

public void DownloadFileFromCDN(string key) {
    GetDownloadUrl(key, presignedUrl =>
    {
        GetFile(presignedUrl);
    });
}

void GetDownloadUrl(string key, Action<string> onComplete) {
    PlayFabClientAPI.GetContentDownloadUrl(new GetContentDownloadUrlRequest() {
        Key = key,
        ThruCDN = true
    }, result => onComplete(result.URL),
    error => Debug.LogError(error.GenerateErrorReport()));
}

void GetFile(string preauthorizedUrl) {
    // Implement your own GET HTTP request here.
}

如上所述,CDN 可能涉及文件更新的延迟。 在开发过程中,强制提取最新文件有时十分有用。

通过 GetContentDownloadUrl 调用,可以将 ThruCDN 参数设置为 False。 返回的 URL 指向未缓存的新文件。

注意

发布的游戏客户端从不使用此选项!