Может ли клиент сокета TCP и protobuf общаться с сервером gRPC? - PullRequest
0 голосов
/ 21 октября 2019

У меня есть две машины, которые общаются друг с другом по TCP, а машина A использует службу машины B. В идеале я хотел бы использовать для этого RPC-фреймворк. На ум приходит gRPC, так как мы уже используем protobuf.

Однако компьютер A уже использует внешнюю библиотеку, которая оборачивает TCP-сокеты для связи, так что код клиентского приложения может отправлять только необработанные байты (закодированные в protobuf) на компьютер B. Поэтому мне интересно, смогу ли я адаптироватькод для работы с сервером gRPC на компьютере B.

1 Ответ

0 голосов
/ 21 октября 2019

gRPC построен поверх http / 2, и вы можете теоретически использовать любой тип соединения (например, доменные сокеты, именованные каналы) для связи с использованием gRPC, так что это, безусловно, возможно. На самом деле, по крайней мере, на ходу gRPC использует TCP по умолчанию.

Если требуется только, чтобы машина A общалась с использованием TCP-сокетов, но вы могли использовать внешние библиотеки, тогда использовать gRPC должно быть довольно легкобиблиотека языка по вашему выбору для реализации взаимодействия клиент-сервер поверх необработанных сокетов TCP.

С другой стороны, если вы не можете использовать библиотеку gRPC, хотя все ещевозможно, вам придется реализовать протокол gRPC самостоятельно, а возможно, и протокол http / 2, если вы не можете использовать какую-либо внешнюю библиотеку;Скорее всего, это будет большая работа, и вам лучше создать более простой протокол RPC для вашего случая использования.

РЕДАКТИРОВАТЬ

Обновленный вопрос проясняет требования. Если вам нужно использовать определенную библиотеку TCP, но вы можете использовать gRPC, я думаю, что сложность задачи действительно зависит от языка программирования.

Например, в go это будетпросто, как создание структуры оболочки, реализуйте для нее интерфейс net.conn и используйте ее с опцией withDialer при создании клиента. В c ++ похоже, что это будет сложнее и повлечет за собой реализацию пользовательского транспорта (хотя я не настолько знаком с API g ++ gRPC c ++, так что может быть более простой способ)

...