漫谈grpc 3:从实践到原理,带你参透 gRPC (2)

Server

func (s *StreamService) List(r *pb.StreamRequest, stream pb.StreamService_ListServer) error {     for n := 0; n <= 6; n++ {         stream.Send(&pb.StreamResponse{             Pt: &pb.StreamPoint{                 ...             },         })     }     return nil }

漫谈grpc 3:从实践到原理,带你参透 gRPC

Client

func printLists(client pb.StreamServiceClient, r *pb.StreamRequest) error {     stream, err := client.List(context.Background(), r)     ...     for {         resp, err := stream.Recv()         if err == io.EOF {             break         }         ...     }     return nil }

漫谈grpc 3:从实践到原理,带你参透 gRPC

三、Client-side streaming RPC:客户端流式 RPC

图片

漫谈grpc 3:从实践到原理,带你参透 gRPC

Server

func (s *StreamService) Record(stream pb.StreamService_RecordServer) error {     for {         r, err := stream.Recv()         if err == io.EOF {             return stream.SendAndClose(&pb.StreamResponse{Pt: &pb.StreamPoint{...}})         }         ...     }     return nil }

漫谈grpc 3:从实践到原理,带你参透 gRPC

Client

func printRecord(client pb.StreamServiceClient, r *pb.StreamRequest) error {     stream, err := client.Record(context.Background())     ...     for n := 0; n < 6; n++ {         stream.Send(r)     }     resp, err := stream.CloseAndRecv()     ...     return nil }

漫谈grpc 3:从实践到原理,带你参透 gRPC

四、Bidirectional streaming RPC:双向流式 RPC

图片

漫谈grpc 3:从实践到原理,带你参透 gRPC

Server

func (s *StreamService) Route(stream pb.StreamService_RouteServer) error {     for {         stream.Send(&pb.StreamResponse{...})         r, err := stream.Recv()         if err == io.EOF {             return nil         }         ...     }     return nil }

漫谈grpc 3:从实践到原理,带你参透 gRPC

Client

func printRoute(client pb.StreamServiceClient, r *pb.StreamRequest) error {     stream, err := client.Route(context.Background())     ...     for n := 0; n <= 6; n++ {         stream.Send(r)         resp, err := stream.Recv()         if err == io.EOF {             break         }         ...     }     stream.CloseSend()     return nil }

漫谈grpc 3:从实践到原理,带你参透 gRPC

客户端与服务端是如何交互的

在开始分析之前,我们要先 gRPC 的调用有一个初始印象。那么最简单的就是对 Client 端调用 Server 端进行抓包去剖析,看看整个过程中它都做了些什么事。如下图:

图片

漫谈grpc 3:从实践到原理,带你参透 gRPC

Magic

SETTINGS

HEADERS

DATA

SETTINGS

WINDOW_UPDATE

PING

HEADERS

DATA

HEADERS

WINDOW_UPDATE

PING

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgffdj.html