//go:build grpcping // +build grpcping package main import ( "fmt" "io" "log" "net" "time" ping "github.com/knative/docs/code-samples/serving/grpc-ping-go/proto" "golang.org/x/net/context" "google.golang.org/grpc" "google.golang.org/grpc/reflection" ) var port = 8080 type pingServer struct { } func (p *pingServer) Ping(ctx context.Context, req *ping.Request) (*ping.Response, error) { return &ping.Response{Msg: fmt.Sprintf("%s - pong", req.Msg)}, nil } func (p *pingServer) PingStream(stream ping.PingService_PingStreamServer) error { for { req, err := stream.Recv() if err == io.EOF { fmt.Println("Client disconnected") return nil } if err != nil { fmt.Println("Failed to receive ping") return err } fmt.Printf("Replying to ping %s at %s\n", req.Msg, time.Now()) err = stream.Send(&ping.Response{ Msg: fmt.Sprintf("pong %s", time.Now()), }) if err != nil { fmt.Printf("Failed to send pong %s\n", err) return err } } } func main() { lis, err := net.Listen("tcp", fmt.Sprintf("0.0.0.0:%d", port)) if err != nil { log.Fatalf("failed to listen: %v", err) } pingServer := &pingServer{} // The grpcServer is currently configured to serve h2c traffic by default. // To configure credentials or encryption, see: https://grpc.io/docs/guides/auth.html#go grpcServer := grpc.NewServer() reflection.Register(grpcServer) ping.RegisterPingServiceServer(grpcServer, pingServer) grpcServer.Serve(lis) }