// GreeterServer is the server API for Greeter service.// All implementations must embed UnimplementedGreeterServer// for forward compatibilitytype GreeterServer interface{//protoc帮我们定义好的调用接口,我们自己的server只需要实现里面的两个方法即可SayHello(context.Context,*HelloRequest)(*HelloReply,error)MustEmbedUnimplementedGreeterServer()}// UnimplementedGreeterServer must be embedded to have forward compatible implementations.type UnimplementedGreeterServer struct{}func(*UnimplementedGreeterServer)SayHello(context.Context,*HelloRequest)(*HelloReply,error){returnnil, status.Errorf(codes.Unimplemented,"method SayHello not implemented")}func(*UnimplementedGreeterServer)MustEmbedUnimplementedGreeterServer(){}funcRegisterGreeterServer(s *grpc.Server, srv GreeterServer){//注册服务
s.RegisterService(&_Greeter_serviceDesc, srv)}
服务端:
type Server struct{//实现了protoc生成go文件中的GreeterServer interface}func(s *Server)MustEmbedUnimplementedGreeterServer(){//TODO implement mepanic("implement me")}func(s *Server)SayHello(ctx context.Context, request *proto.HelloRequest)(*proto.HelloReply,error){// 所以我们这里实现了SayHello方法,并在里面写自己的逻辑return&proto.HelloReply{
Message:"hello "+ request.Name,},nil}funcmain(){//1. 通过grpc新建一个服务
g := grpc.NewServer()//2. 把服务注册上去
proto.RegisterGreeterServer(g,&Server{})//3. 启动服务
lis, err := net.Listen("tcp","0.0.0.0:8088")if err !=nil{panic("failed to listen: "+ err.Error())}
err = g.Serve(lis)//把我们监听的端口和服务绑定在一起(并且该函每收到一个请求,就会发起一个协程来处理,不会只接收一个请求就挂逼)if err !=nil{panic("failed to start grpc:"+ err.Error())}}