diff --git a/.gitignore b/.gitignore index f1c181e..ac3895d 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,6 @@ # Output of the go coverage tool, specifically when used with LiteIDE *.out + +# Ignore binary +/grpc_server_example diff --git a/go.mod b/go.mod index 253382a..3919e59 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module github.com/iresty/grpc_server_example +module github.com/api7/grpc_server_example go 1.11 diff --git a/main.go b/main.go index 7e8d9df..86bdc36 100644 --- a/main.go +++ b/main.go @@ -23,23 +23,38 @@ package main import ( "context" + "flag" "fmt" "log" "net" - "runtime" + "os" + "os/signal" + "syscall" "time" + "google.golang.org/grpc" "google.golang.org/grpc/codes" + "google.golang.org/grpc/credentials" "google.golang.org/grpc/status" - pb "github.com/iresty/grpc_server_example/proto" - "google.golang.org/grpc" + pb "github.com/api7/grpc_server_example/proto" ) -const ( - port = ":50051" +var ( + grpcAddr = ":50051" + grpcsAddr = ":50052" + + crtFilePath = "../t/cert/apisix.crt" + keyFilePath = "../t/cert/apisix.key" ) +func init() { + flag.StringVar(&grpcAddr, "grpc-address", grpcAddr, "address for grpc") + flag.StringVar(&grpcsAddr, "grpcs-address", grpcsAddr, "address for grpcs") + flag.StringVar(&crtFilePath, "crt", crtFilePath, "path to certificate") + flag.StringVar(&keyFilePath, "key", keyFilePath, "path to key") +} + // server is used to implement helloworld.GreeterServer. type server struct{} @@ -74,16 +89,39 @@ func (s *server) Plus(ctx context.Context, in *pb.PlusRequest) (*pb.PlusReply, e } func main() { + flag.Parse() + + go func() { + lis, err := net.Listen("tcp", grpcAddr) + if err != nil { + log.Fatalf("failed to listen: %v", err) + } + s := grpc.NewServer() + pb.RegisterGreeterServer(s, &server{}) + if err := s.Serve(lis); err != nil { + log.Fatalf("failed to serve: %v", err) + } + }() - runtime.GOMAXPROCS(1) + go func() { + lis, err := net.Listen("tcp", grpcsAddr) + if err != nil { + log.Fatalf("failed to listen: %v", err) + } - lis, err := net.Listen("tcp", port) - if err != nil { - log.Fatalf("failed to listen: %v", err) - } - s := grpc.NewServer() - pb.RegisterGreeterServer(s, &server{}) - if err := s.Serve(lis); err != nil { - log.Fatalf("failed to serve: %v", err) - } + c, err := credentials.NewServerTLSFromFile(crtFilePath, keyFilePath) + if err != nil { + log.Fatalf("credentials.NewServerTLSFromFile err: %v", err) + } + s := grpc.NewServer(grpc.Creds(c)) + pb.RegisterGreeterServer(s, &server{}) + if err := s.Serve(lis); err != nil { + log.Fatalf("failed to serve: %v", err) + } + }() + + signals := make(chan os.Signal, 1) + signal.Notify(signals, os.Interrupt, syscall.SIGTERM) + sig := <-signals + log.Printf("get signal %s, exit\n", sig.String()) }