Как работает gRPC streaming?

Middle
757 просмотров
AFK Offer AI

gRPC поддерживает четыре типа взаимодействия, три из которых — стриминг:

service Chat {
    rpc Unary(Req) returns (Resp);                    // обычный
    rpc ServerStream(Req) returns (stream Resp);       // сервер стримит
    rpc ClientStream(stream Req) returns (Resp);       // клиент стримит
    rpc BiDi(stream Req) returns (stream Resp);        // оба стримят
}

Server streaming — клиент отправляет один запрос, сервер шлёт поток ответов. Пример: подписка на обновления цен.

func (s *server) ServerStream(req *pb.Req, stream pb.Chat_ServerStreamServer) error {
    for i := 0; i < 10; i++ {
        if err := stream.Send(&pb.Resp{Data: fmt.Sprintf("msg %d", i)}); err != nil {
            return err
        }
    }
    return nil
}

Bidirectional streaming — оба конца читают и пишут независимо. Идеально для чатов и real-time. Всё работает поверх одного HTTP/2 соединения с мультиплексированием. Стриминг экономит ресурсы: не нужен polling, данные пушатся по мере появления.

Следующий вопрос

Что такое binary search?