Strumieniowe RPC: serwerowe, klienckie i dwukierunkowe
Wyjdź poza wywołania unarne i poznaj trzy tryby strumieniowania gRPC służące do wysyłania sekwencji komunikatów w ramach jednego wywołania.
Strumieniowe RPC: serwerowe, klienckie i dwukierunkowe to bezpłatna lekcja gRPC & High Performance APIs na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej gRPC & High Performance APIs, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs gRPC & High Performance APIs zawiera 4 lekcji w sumie.
Części tej lekcji nie zostały jeszcze przetłumaczone i są wyświetlane po angielsku.
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
streamkeyword in proto. - All ride a single multiplexed HTTP/2 stream with built-in flow control.
- Choose the mode that matches your data's shape.
Często zadawane pytania
Czy lekcja „Strumieniowe RPC: serwerowe, klienckie i dwukierunkowe” jest bezpłatna?
Tak — pełny tekst „Strumieniowe RPC: serwerowe, klienckie i dwukierunkowe” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu gRPC & High Performance APIs, przejdź na CoddyKit PRO. Kurs gRPC & High Performance APIs zawiera 4 lekcji w sumie.
Co nauczysz się w „Strumieniowe RPC: serwerowe, klienckie i dwukierunkowe”?
Wyjdź poza wywołania unarne i poznaj trzy tryby strumieniowania gRPC służące do wysyłania sekwencji komunikatów w ramach jednego wywołania. Ćwiczysz gRPC & High Performance APIs z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć gRPC & High Performance APIs?
Nie wymagamy żadnego doświadczenia. gRPC & High Performance APIs w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „Strumieniowe RPC: serwerowe, klienckie i dwukierunkowe”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji gRPC & High Performance APIs?
Tak. Każda lekcja gRPC & High Performance APIs zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Definiowanie schematów Protobuf
- Generowanie kodu gRPC
- Prosta usługa unarna gRPC
- Strumieniowe RPC: serwerowe, klienckie i dwukierunkowe