Android DownloadManager с gRPC - PullRequest
       3

Android DownloadManager с gRPC

0 голосов
/ 26 марта 2020

В настоящее время работает над API, который позволяет клиенту (Android / Kotlin) загружать видео с сервера. С традиционным HTTP URI это было бы довольно легкой задачей, я бы просто загрузил Менеджер, и проблема была решена. Тем не менее, я использую gRP C (c ++) для сервера.

В настоящее время у меня есть решение с потоками Kotlin, которое в основном берет однонаправленный поток с сервера и использует файловый блок хранить их в локальном файле . Однако, даже если он работает для основных частей, у него много угловых случаев, и поэтому я хочу использовать DownloadManager. Для получения дополнительной информации о том, что у меня есть в настоящее время, пожалуйста, проверьте: Обработка загрузки файлов с помощью gRP C на Android

Пройдя некоторое время в поисках решения, я обнаружил, что оно Можно сопоставить вызов RP C с REST API с помощью этого проекта и, в основном, сделать что-то вроде:

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

или использовать файл YAML для настройки API Google.

Все это кажется довольно удобным при использовании Google Cloud и Golang, но Я создаю автономный сервер на C ++ .

Так что здесь есть два вопроса :

  • Можно ли обслуживать файл stati c REST способом с помощью gRP C c ++

  • Есть ли другой способ использовать DownloadManager с gRP C?

1 Ответ

1 голос
/ 27 марта 2020

Как предложил комментатор по данному вопросу, gRP C предназначен для структурированных данных, а не для загрузки необработанных файлов. Попытка отобразить URI и вызов RP C будет недостаточной для того, чтобы DownloadManager работал с gRP C, поскольку сервер gRP C будет отправлять и ожидать дополнительные данные помимо самого необработанного файла, которые не будут быть понятым или отправленным DownloadManager.

Вы, конечно, можете использовать сервер и клиент gRP C для отправки больших файлов, но он не будет иметь одинаковый набор функций, встроенных для загрузки больших файлов (таких как возобновить загрузку позже, если соединение разорвано), например, использовать HTTP-сервер + указанную c библиотеку / клиент загрузки файлов. Я бы порекомендовал просто запустить отдельный HTTP-сервер для ваших нужд по загрузке файлов.

[перекрестный постинг моего ответа из списка рассылки grpcio]

...