GRPC流的使用
流传输方式简介
客户端流
客户端发送多次,服务端响应一次(关闭时响应)。
服务端流
客户端先发送一次,服务端响应多次。
双向流
客户端发送,服务端响应。
客户端流
服务定义
1 | rpc ClientStreamPing(stream PingRequest) returns (PingReply); |
客户端
1 | stream, err := client.SayStream(context.Background()) |
- 创建客户端之后,调用服务生成流
- 使用流发送消息
- 关闭流并接受服务端的响应
服务端
1 | func (s *Server) SayStream(stream pd.HelloServer_SayStreamServer) error { |
- 实现流的接口
- 接受客户端发送的消息
- 正常关闭时发送响应消息
服务端流
服务定义
1 | rpc ServerStreamPing(PingRequest) returns (stream PingReply); |
客户端
1 | stream, err := client.SayStreamServer(context.Background(), &pd.HelloReq{ |
服务端
1 | func (s *Server) SayStreamServer(req *pd.HelloReq, stream pd.HelloServer_SayStreamServerServer) error { |
双向流
服务定义
1 | rpc SayDoubleStream(stream helloReq) returns (stream helloRep) {}; |
客户端
1 | stream, err := client.SayDoubleStream(context.Background()) |
服务端
1 | func (s *Server) SayDoubleStream(stream pd.HelloServer_SayDoubleStreamServer) error { |