Передача файлов с использованием gRPC
Каков стандартный способ использования gRPC и буфера протокола для передачи файла или изображений из одного процесса в другой? Размер файла составляет от 1 до 6 МБ.
В основном я хочу знать, как реализовать пары кода отправитель / получатель для python, C++ и golang.
http://github.com/johanbrandhorst/chunker
Это самое близкое, что я могу найти до сих пор для Голанга. Я думаю, распространяется ли это на Python и C++. Более общий подход с меньшим количеством зависимостей является предпочтительным.
Я создаю мультисервисы для обмена изображениями между машинами / процессами посредством передачи сообщений IPC. Другим вариантом является использование общей памяти. Я не уверен, что Redis может хранить изображения
2 ответа
Я не делал этого раньше, но я думаю, что это сводится к типам, поддерживаемым языком буфера протоколов.
Я понимаю, что вы можете использовать bytes
тип, поскольку он может содержать любую произвольную последовательность байтов. Закодируйте контент перед его сохранением, назначьте и отправьте!
Посмотрите здесь для скалярных типов.
Другой подход заключается в том, чтобы хранить файл в месте, которое могут прочитать "службы", и, возможно, записать, если потребуется для некоторых из них. Затем отправьте сообщение gRPC "заинтересованным" службам с информацией, необходимой для доступа (или выполнения каких-либо других действий) к рассматриваемому файлу (файлам).
Для небольших файлов (скажем, менее 1 МБ) помещать весь файл в одно сообщение (как bytes
) очень просто. Для больших файлов может быть естественным деление файлов на части и использование потока; см. мой ответ на аналогичный вопрос.
Насколько мне известно, отправка файла размером более 1 МБ с использованием буфера протокола может быть не лучшим способом. Отправка фрагмента файла фрагментом через байтовую строку через сокет - лучший подход.