mirror of
https://github.com/chai2010/advanced-go-programming-book.git
synced 2025-05-24 12:32:21 +00:00
74 lines
1.5 KiB
Go
74 lines
1.5 KiB
Go
package main
|
|
|
|
import (
|
|
"flag"
|
|
"log"
|
|
"net"
|
|
"net/http"
|
|
|
|
"github.com/golang/glog"
|
|
"github.com/grpc-ecosystem/grpc-gateway/runtime"
|
|
"golang.org/x/net/context"
|
|
"google.golang.org/grpc"
|
|
)
|
|
|
|
var (
|
|
port = ":5000"
|
|
echoEndpoint = flag.String("echo_endpoint", "localhost"+port, "endpoint of YourService")
|
|
)
|
|
|
|
type myGrpcServer struct{}
|
|
|
|
func (s *myGrpcServer) Get(ctx context.Context, in *StringMessage) (*StringMessage, error) {
|
|
return &StringMessage{Value: "Get: " + in.Value}, nil
|
|
}
|
|
func (s *myGrpcServer) Post(ctx context.Context, in *StringMessage) (*StringMessage, error) {
|
|
return &StringMessage{Value: "Post: " + in.Value}, nil
|
|
}
|
|
|
|
func run() error {
|
|
ctx := context.Background()
|
|
ctx, cancel := context.WithCancel(ctx)
|
|
defer cancel()
|
|
|
|
mux := runtime.NewServeMux()
|
|
opts := []grpc.DialOption{grpc.WithInsecure()}
|
|
err := RegisterRestServiceHandlerFromEndpoint(ctx, mux, *echoEndpoint, opts)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return http.ListenAndServe(":8080", mux)
|
|
}
|
|
|
|
// $ curl localhost:8080/get/gopher
|
|
// {"value":"Get: gopher"}
|
|
|
|
// $ curl localhost:8080/post -X POST --data '{"value":"grpc"}'
|
|
// {"value":"Post: grpc"}
|
|
|
|
func main() {
|
|
flag.Parse()
|
|
defer glog.Flush()
|
|
|
|
go startGrpcServer()
|
|
|
|
if err := run(); err != nil {
|
|
glog.Fatal(err)
|
|
}
|
|
}
|
|
|
|
func startGrpcServer() {
|
|
server := grpc.NewServer()
|
|
RegisterRestServiceServer(server, new(myGrpcServer))
|
|
|
|
lis, err := net.Listen("tcp", port)
|
|
if err != nil {
|
|
log.Panicf("could not list on %s: %s", port, err)
|
|
}
|
|
|
|
if err := server.Serve(lis); err != nil {
|
|
log.Panicf("grpc serve error: %s", err)
|
|
}
|
|
}
|