> Как устроена передача сообщений в gRPC (Go)

Уровень: senior · Роль: backend · Категория: Технические вопросы

Компании: Ozon

Стек: Go

> Пример ответа

gRPC использует HTTP/2 в качестве транспортного протокола, что обеспечивает мультиплексирование потоков, сжатие заголовков и двустороннюю потоковую передачу. Сообщения сериализуются по умолчанию в Protocol Buffers (protobuf), но возможна и другая сериализация. Каждое сообщение упаковывается в фреймы HTTP/2: сначала отправляется заголовочный фрейм с метаданными (например, путь к методу), затем фреймы данных, содержащие сжатое сообщение protobuf. Для потоковой передачи gRPC поддерживает четыре режима: унарный (один запрос - один ответ), серверный стриминг (один запрос - поток ответов), клиентский стриминг (поток запросов - один ответ) и двунаправленный стриминг (поток запросов и ответов). В Go реализация использует grpc.ClientStream и grpc.ServerStream, которые работают поверх HTTP/2 потоков, обеспечивая асинхронную отправку и получение сообщений. Важно: сообщения в стримах не гарантируют строгой упорядоченности, если не используется синхронизация на уровне приложения.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью