【问题标题】:Android DownloadManager with gRPC带有 gRPC 的 Android 下载管理器
【发布时间】:2020-03-26 11:00:35
【问题描述】:

目前正在开发使客户端(Android/Kotlin)能够从服务器下载视频的 API。使用传统的 HTTP URI 这将是一项非常容易的任务,我只需 DownloadManager 即可解决问题。但是,我在服务器上使用 gRPC (c++)。

我目前有一个 Kotlin 流的解决方案,它基本上从服务器获取单向流并使用文件块将它们存储在本地文件中。然而,即使它适用于主要部分,它也有很多极端情况,这就是我想使用 DownloadManager 的原因。有关我目前拥有的更多信息,请查看:Handling file download with gRPC on Android

在寻找解决方案一段时间后,我发现可以使用project 将 RPC 调用映射到 REST API,并且基本上可以执行以下操作:

rpc Download(DownloadRequest) returns (DownloadResponse) {
   option (google.api.http) = {
      post: "/v1/download"
      body: "*"
   };
}

或使用 YAML 文件来配置 google API。

所有这些在使用 Google Cloud 和 Golang 时似乎都非常方便,但是我正在用 C++ 创建一个独立服务器

所以这里有两个问题:

  • 是否可以使用 gRPC c++ 以 REST 方式提供静态文件

  • 还有其他方法可以将 DownloadManager 与 gRPC 一起使用吗?

【问题讨论】:

  • gRPC 用于结构化数据。如果您只想下载文件,请使用流式传输原始文件内容的简单 HTTP 服务器。
  • 所以我应该启动两台服务器,一台用于文件,一台用于 grpc ?这就是你的意思?

标签: android c++ rest grpc


【解决方案1】:

正如问题的评论者所建议的那样,gRPC 用于结构化数据而不是原始文件下载。尝试在 URI 和 RPC 调用之间进行映射不足以使 DownloadManager 与 gRPC 一起工作,因为 gRPC 服务器将发送并期望超出原始文件本身的额外数据,这些数据将不会被 DownloadManager 理解或发送。

您当然可以使用 gRPC 服务器和客户端来发送大文件,但它不会具有与使用某些东西相同的内置大文件下载功能集(例如,如果连接断开,稍后恢复下载)就像一个 HTTP 服务器 + 一个特定的文件下载库/客户端。我建议您只运行一个单独的 HTTP 服务器来满足您的文件下载需求。

[从grpcio mailing list] 交叉发布我的答案

【讨论】:

    猜你喜欢
    • 2017-08-12
    • 2020-11-09
    • 1970-01-01
    • 1970-01-01
    • 2012-05-20
    • 1970-01-01
    • 2020-03-21
    • 2014-01-23
    • 1970-01-01
    相关资源
    最近更新 更多