Передача файлов с использованием gRPC

Каков стандартный способ использования gRPC и буфера протокола для передачи файла или изображений из одного процесса в другой? Размер файла составляет от 1 до 6 МБ.

В основном я хочу знать, как реализовать пары кода отправитель / получатель для python, C++ и golang.

http://github.com/johanbrandhorst/chunker

Это самое близкое, что я могу найти до сих пор для Голанга. Я думаю, распространяется ли это на Python и C++. Более общий подход с меньшим количеством зависимостей является предпочтительным.

Я создаю мультисервисы для обмена изображениями между машинами / процессами посредством передачи сообщений IPC. Другим вариантом является использование общей памяти. Я не уверен, что Redis может хранить изображения

2 ответа

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

Я понимаю, что вы можете использовать bytes тип, поскольку он может содержать любую произвольную последовательность байтов. Закодируйте контент перед его сохранением, назначьте и отправьте!

Посмотрите здесь для скалярных типов.

Другой подход заключается в том, чтобы хранить файл в месте, которое могут прочитать "службы", и, возможно, записать, если потребуется для некоторых из них. Затем отправьте сообщение gRPC "заинтересованным" службам с информацией, необходимой для доступа (или выполнения каких-либо других действий) к рассматриваемому файлу (файлам).

Для небольших файлов (скажем, менее 1 МБ) помещать весь файл в одно сообщение (как bytes) очень просто. Для больших файлов может быть естественным деление файлов на части и использование потока; см. мой ответ на аналогичный вопрос.

Насколько мне известно, отправка файла размером более 1 МБ с использованием буфера протокола может быть не лучшим способом. Отправка фрагмента файла фрагментом через байтовую строку через сокет - лучший подход.

Как отправлять файлы "кусками" по сокету?

Другие вопросы по тегам