gRPC C # загрузка / выгрузка файла + сторона веб-клиента

Основная проблема:

Я ищу решение для улучшения скорости загрузки / выгрузки больших файлов. Я слышал об относительно новой технологии gRPC. Я понимаю, что это хорошо для связи сервера с сервером, например. архитектура микросервисов.

Клиент

Однако мне нужен компонент загрузки / выгрузки файлов в интерфейсе (браузере) (что-то вроде Fine uploader, jQuery file upload plugin, Resumable.js) с поддержкой gRPC. Я могу делать поддержку сама. Но я не знаю, как и что и возможно ли это вообще. Так что мне нужен пример, или совет, или указание в правильном направлении. Независимо от стороны JS: vanilla, react, angular ...

На стороне сервера

  • c # предпочтительнее
  • node.js возможно
  • java работоспособный

Исследования по этому вопросу

Пожалуйста, помогите или хотя бы скажите, что это невозможно


person Albert Lyubarsky    schedule 26.12.2019    source источник


Ответы (1)


Да, можно использовать gRPC для связи между браузером и сервером. Я предлагаю вам проверить концепцию, прежде чем внедрять решение.

gRPC использует protobuf для связи, а данные, которые необходимо передать, инкапсулируются в protobuf message.

Первый ответ в примере загрузки файла Java gRPC правильный. Чтобы иметь возможность передавать файлы по сети, вы должны преобразовать их в bytes.

Используя его пример,

message DataChunk {
   bytes data = 1;
}

service imageService {
   rpc DownloadProductImage(DownloadProductImageRequest) returns(stream DataChunk);
}

Весь этот код должен быть в протофиле, а реализация должна быть сгенерирована с использованием генератора protobuf (обычно это плагин maven для java).

В приведенном примере важно отметить слово поток, которое позволит вам отправлять байты на сервер или наоборот. В этом примере он загружает поток байтов из вызова службы DownloadProductImage.

Вот хорошая отправная точка gRPC Java Basics, Концепции gRPC, Создание службы gRPC с помощью Java

person atish.s    schedule 27.12.2019