客户端流式传输RPC
客户端流式
proto
message FileRequest {
string file_name = 1;
bytes content = 2;
}
service ClientStream {
rpc UploadFile(stream FileRequest)returns(Response){}
}
服务端
type ClientStream struct {
UnimplementedClientStreamServer
}
func (c *ClientStream) UploadFile(stream ClientStream_UploadFileServer) error {
for {
recv, err := stream.Recv()
fmt.Println(recv, err)
if err != nil {
break
}
if err == io.EOF {
return stream.SendAndClose(&Response{Name: "完成"})
}
}
return nil
}
func main() {
rpcService := grpc.NewServer()
stream.RegisterClientStreamServer(rpcService, &stream.ClientStream{})
conn, err := net.Listen("tcp", ":8080")
if err != nil {
log.Fatal(" 启动监听出错", err)
}
err = rpcService.Serve(conn)
if err != nil {
log.Fatal("启动gRpc服务出错", err)
}
fmt.Println("启动gRpc成功")
}
客户端
func main() {
addr := ":8080"
dial, err := grpc.Dial(addr, grpc.WithTransportCredentials(insecure.NewCredentials()))
if err != nil {
log.Fatal("服务端连接出错:", err)
}
defer dial.Close()
client := stream.NewClientStreamClient(dial)
streams, err := client.UploadFile(context.Background())
for i := 0; i < 10; i++ {
streams.Send(&stream.FileRequest{FileName: "测试测试"})
}
recv, err := streams.CloseAndRecv()
fmt.Println(recv, err)
}

浙公网安备 33010602011771号