90 lines
1.8 KiB
Go
90 lines
1.8 KiB
Go
/*
|
|
* @Date: 2021-06-15 22:08:18
|
|
* @LastEditors: viletyy
|
|
* @LastEditTime: 2021-06-16 00:49:55
|
|
* @FilePath: /grpc-demo/client/client.go
|
|
*/
|
|
package main
|
|
|
|
import (
|
|
"context"
|
|
"flag"
|
|
"io"
|
|
"log"
|
|
|
|
pb "github.com/go-inpro/grpc-demo/proto"
|
|
"google.golang.org/grpc"
|
|
)
|
|
|
|
var port string
|
|
|
|
func init() {
|
|
flag.StringVar(&port, "port", "8001", "启动端口号")
|
|
flag.Parse()
|
|
}
|
|
|
|
func main() {
|
|
conn, _ := grpc.Dial(":"+port, grpc.WithInsecure())
|
|
defer conn.Close()
|
|
|
|
client := pb.NewGreeterClient(conn)
|
|
_ = SayHello(client) // 单次RPC
|
|
_ = SayList(client, &pb.HelloRequest{Name: "viletyy"}) // 服务端流式RPC
|
|
_ = SayRecord(client, &pb.HelloRequest{Name: "viletyy"}) // 客户端流式RPC
|
|
_ = SayRoute(client, &pb.HelloRequest{Name: "viletyy"}) // 双向流式RPC
|
|
}
|
|
|
|
func SayHello(client pb.GreeterClient) error {
|
|
resp, _ := client.SayHello(context.Background(), &pb.HelloRequest{Name: "viletyy"})
|
|
log.Printf("client.SayHello resp: %s", resp.Message)
|
|
return nil
|
|
}
|
|
|
|
func SayList(client pb.GreeterClient, r *pb.HelloRequest) error {
|
|
stream, _ := client.SayList(context.Background(), r)
|
|
for {
|
|
resp, err := stream.Recv()
|
|
if err == io.EOF {
|
|
|
|
break
|
|
}
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
log.Printf("resp: %v", resp)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func SayRecord(client pb.GreeterClient, r *pb.HelloRequest) error {
|
|
stream, _ := client.SayRecord(context.Background())
|
|
for n := 0; n < 6; n++ {
|
|
_ = stream.Send(r)
|
|
}
|
|
resp, _ := stream.CloseAndRecv()
|
|
log.Printf("resp err: %v", resp)
|
|
|
|
return nil
|
|
}
|
|
|
|
func SayRoute(client pb.GreeterClient, r *pb.HelloRequest) error {
|
|
stream, _ := client.SayRoute(context.Background())
|
|
for n := 0; n <= 6; n++ {
|
|
_ = stream.Send(r)
|
|
resp, err := stream.Recv()
|
|
if err == io.EOF {
|
|
break
|
|
|
|
}
|
|
if err != nil {
|
|
return nil
|
|
}
|
|
|
|
log.Printf("resp err: %v", resp)
|
|
}
|
|
|
|
_ = stream.CloseSend()
|
|
return nil
|
|
}
|