Beego开发Grpc服务,同时提供Grpc和普通http服务。
在Beego项目中,一般都是直接开发应用,监听一个端口,使用一种协议。
当我们想使用Grpc服务,同时想使用http服务时,在同一个代码库中时,这时候需要提供2个服务,监听2个端口。
示例
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 
 | package main
 
 import (
 "context"
 "github.com/astaxie/beego"
 "github.com/astaxie/beego/logs"
 "google.golang.org/grpc"
 "google.golang.org/grpc/reflection"
 pb "grpc_demo/test"
 "net"
 
 )
 
 func main(){
 end := make(chan bool, 1)
 go RunGrpc()
 
 beego.Run()
 <-end
 }
 
 func RunGrpc(){
 list, err := net.Listen("tcp", ":8081")
 logs.Info("grpc:8081")
 if err != nil {
 logs.Info("grpc err=%s", err)
 }
 
 s := grpc.NewServer()
 pb.RegisterGreeterServer(s, &HelloServer{})
 reflection.Register(s)
 if err := s.Serve(list); err != nil {
 logs.Info("failed to serve: %v", err)
 }
 }
 
 type HelloServer struct{}
 
 // SayHello implements helloworld.GreeterServer
 func (s *HelloServer) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) {
 
 return &pb.HelloReply{Message: "Hello " + in.Name}, nil
 }
 
 | 
启动后,可以看到同时监听2个端口
| 12
 
 | 2019/07/30 19:11:22.506 [I]  grpc:80812019/07/30 19:11:22.533 [I]  http server Running on http://:8080
 
 |