mirror of https://github.com/knative/docs.git
99 lines
2.3 KiB
Go
99 lines
2.3 KiB
Go
//go:build grpcping
|
|
// +build grpcping
|
|
|
|
package main
|
|
|
|
import (
|
|
"crypto/tls"
|
|
"flag"
|
|
"fmt"
|
|
"io"
|
|
"log"
|
|
"time"
|
|
|
|
pb "github.com/knative/docs/code-samples/serving/grpc-ping-go/proto"
|
|
"golang.org/x/net/context"
|
|
"google.golang.org/grpc"
|
|
"google.golang.org/grpc/credentials"
|
|
)
|
|
|
|
var (
|
|
serverAddr = flag.String("server_addr", "127.0.0.1:8080", "The server address in the format of host:port")
|
|
serverHostOverride = flag.String("server_host_override", "", "")
|
|
insecure = flag.Bool("insecure", false, "Set to true to skip SSL validation")
|
|
skipVerify = flag.Bool("skip_verify", false, "Set to true to skip server hostname verification in SSL validation")
|
|
)
|
|
|
|
func main() {
|
|
flag.Parse()
|
|
|
|
var opts []grpc.DialOption
|
|
if *serverHostOverride != "" {
|
|
opts = append(opts, grpc.WithAuthority(*serverHostOverride))
|
|
}
|
|
if *insecure {
|
|
opts = append(opts, grpc.WithInsecure())
|
|
} else {
|
|
cred := credentials.NewTLS(&tls.Config{
|
|
InsecureSkipVerify: *skipVerify,
|
|
})
|
|
opts = append(opts, grpc.WithTransportCredentials(cred))
|
|
}
|
|
conn, err := grpc.Dial(*serverAddr, opts...)
|
|
if err != nil {
|
|
log.Fatalf("fail to dial: %v", err)
|
|
}
|
|
defer conn.Close()
|
|
|
|
client := pb.NewPingServiceClient(conn)
|
|
|
|
ping(client, "hello")
|
|
pingStream(client, "hello")
|
|
}
|
|
|
|
func ping(client pb.PingServiceClient, msg string) {
|
|
ctx, cancel := context.WithTimeout(context.Background(), 120*time.Second)
|
|
defer cancel()
|
|
rep, err := client.Ping(ctx, &pb.Request{Msg: msg})
|
|
if err != nil {
|
|
log.Fatalf("%v.Ping failed %v: ", client, err)
|
|
}
|
|
log.Printf("Ping got %v\n", rep.GetMsg())
|
|
}
|
|
|
|
func pingStream(client pb.PingServiceClient, msg string) {
|
|
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
|
|
defer cancel()
|
|
stream, err := client.PingStream(ctx)
|
|
if err != nil {
|
|
log.Fatalf("%v.(_) = _, %v", client, err)
|
|
}
|
|
|
|
waitc := make(chan struct{})
|
|
go func() {
|
|
for {
|
|
in, err := stream.Recv()
|
|
if err == io.EOF {
|
|
// read done.
|
|
close(waitc)
|
|
return
|
|
}
|
|
if err != nil {
|
|
log.Fatalf("Failed to receive a response : %v", err)
|
|
}
|
|
log.Printf("Got %s", in.GetMsg())
|
|
}
|
|
}()
|
|
|
|
i := 0
|
|
for i < 20 {
|
|
if err := stream.Send(&pb.Request{Msg: fmt.Sprintf("%s-%d", msg, i)}); err != nil {
|
|
log.Fatalf("Failed to send a ping: %v", err)
|
|
}
|
|
i++
|
|
}
|
|
stream.CloseSend()
|
|
<-waitc
|
|
|
|
}
|