0Pricing
gRPC & High Performance APIs · Урок

Потоковые RPC: серверные, клиентские и двунаправленные

Выйдите за рамки унарных вызовов и изучите три потоковых режима gRPC для отправки последовательностей сообщений в рамках одного вызова.

«Потоковые RPC: серверные, клиентские и двунаправленные» — бесплатный урок gRPC & High Performance APIs на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения gRPC & High Performance APIs, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс gRPC & High Performance APIs содержит 4 уроков всего.

Части этого урока еще не переведены и отображаются на английском.

Beyond Unary

A unary RPC is one request, one response. But many problems need a sequence of messages — feeds, uploads, chat.

gRPC offers three streaming modes built on HTTP/2 streams.

The Four Method Shapes

In a .proto service you can declare:

  • Unary: one in, one out.
  • Server streaming: one in, many out.
  • Client streaming: many in, one out.
  • Bidirectional: many in, many out.

Declaring Streams in Proto

The stream keyword marks a parameter as a stream.

service Feed {
  rpc Watch (WatchRequest) returns (stream Event);
  rpc Upload (stream Chunk) returns (UploadResult);
  rpc Chat (stream Message) returns (stream Message);
}

Server Streaming

The client sends one request; the server replies with many messages until it closes the stream.

Great for: live feeds, large result sets, progress updates.

// Server side (Go-style pseudocode)
func (s *server) Watch(req *WatchRequest, stream Feed_WatchServer) error {
  for _, e := range events {
    stream.Send(e)
  }
  return nil
}

Client Streaming

The client sends many messages, then the server returns a single response.

Great for: file uploads, batched ingestion, aggregations.

// Server reads the whole client stream, then replies once
func (s *server) Upload(stream Feed_UploadServer) error {
  for {
    chunk, err := stream.Recv()
    if err == io.EOF {
      return stream.SendAndClose(&UploadResult{})
    }
  }
}

Bidirectional Streaming

Both sides send streams independently over the same call. Messages can interleave freely.

Great for: chat, real-time collaboration, interactive protocols.

Why It's Efficient

All four shapes ride a single HTTP/2 stream — no new connection per message.

Multiplexing means many streaming calls share one connection without head-of-line blocking.

Flow Control

HTTP/2 provides built-in flow control, so a slow reader naturally backpressures a fast writer.

This prevents a streaming server from overwhelming a client that can't keep up.

Ending a Stream

Streams close explicitly:

  • Server streaming ends when the server returns.
  • Client streaming ends when the client signals end-of-stream and the server replies.
  • Bidirectional ends when both halves complete or an error/cancel occurs.

Errors & Cancellation

Either side can cancel or fail mid-stream. The peer receives a status code and should clean up.

Always handle EOF and error returns from Recv() / Send() to avoid leaks.

Choosing a Mode

Pick by data shape:

  • One-shot request/response: unary.
  • Push many results: server streaming.
  • Send many, get a summary: client streaming.
  • Continuous two-way: bidirectional.

Quick Check

Test your understanding of streaming RPCs.

Recap

You learned gRPC's streaming modes.

  • Unary, server streaming, client streaming, and bidirectional.
  • Mark streams with the stream keyword in proto.
  • All ride a single multiplexed HTTP/2 stream with built-in flow control.
  • Choose the mode that matches your data's shape.

Часто задаваемые вопросы

Урок «Потоковые RPC: серверные, клиентские и двунаправленные» бесплатный?

Да — полный текст урока «Потоковые RPC: серверные, клиентские и двунаправленные» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс gRPC & High Performance APIs, подпишись на CoddyKit PRO. Курс gRPC & High Performance APIs содержит 4 уроков всего.

Чему я научусь в уроке «Потоковые RPC: серверные, клиентские и двунаправленные»?

Выйдите за рамки унарных вызовов и изучите три потоковых режима gRPC для отправки последовательностей сообщений в рамках одного вызова. Ты практикуешь gRPC & High Performance APIs с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать gRPC & High Performance APIs?

Предыдущий опыт не требуется. gRPC & High Performance APIs на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Потоковые RPC: серверные, клиентские и двунаправленные»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке gRPC & High Performance APIs?

Да. Каждый урок gRPC & High Performance APIs включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Определение схемы Protobuf
  2. Генерация кода gRPC
  3. Простой однонаправленный сервис gRPC
  4. Потоковые RPC: серверные, клиентские и двунаправленные
← Назад к gRPC & High Performance APIs