Этот вопрос проверяет знание моделей общения между клиентом и сервером в gRPC.
gRPC поддерживает четыре вида вызовов: одиночный RPC (Unary) — один запрос/ответ, серверный стриминг — один запрос, поток ответов, клиентский стриминг — поток запросов, один ответ, и двунаправленный стриминг (Bidirectional) — поток запросов и поток ответов.
Unary RPC:
Клиент отправляет одно сообщение, получает одно сообщение.
Server Streaming RPC:
Клиент отправляет одну просьбу, получает поток ответов (stream).
Client Streaming RPC:
Клиент отправляет поток запросов, сервер возвращает одну ответку.
Bidirectional Streaming RPC:
Оба потока работают независимо, сообщения обмениваются асинхронно.
Пример в .proto:
rpc GetData(Request) returns (Response); // Unary
rpc ListData(Request) returns (stream Response); // Server streaming
rpc UploadData(stream Request) returns (Response); // Client streaming
rpc Chat(stream Message) returns (stream Message); // BidirectionalКогда использовать:
Стриминг для больших данных, двунаправленный — для чатов и real-time.