客户端流式传输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)
}
posted @ 2023-09-26 17:28  CrryG_GPC  阅读(27)  评论(0)    收藏  举报