GRPC基本流程

1.编写protobuf文件定义service及massage

syntax = "proto3";
 
option objc_class_prefix = "HLW";


package helloworld;


// The greeting service definition.

service Greeter {

  // Sends a greeting

  rpc SayHello (HelloRequest) returns (HelloReply) {}

}

 
// The request message containing the user's name.

message HelloRequest {

  string name = 1;

}

 
// The response message containing the greetings

message HelloReply {

  string message = 1;

}

2.实现定义的service

package main

import (
    "log"
    "net"
    pb "your_path_to_gen_pb_dir/helloworld"
    "golang.org/x/net/context"
    "google.golang.org/grpc"
)
const (
    port = ":50051"
)
// server is used to implement helloworld.GreeterServer.
type server struct{}
// SayHello implements helloworld.GreeterServer
func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) {
    return &pb.HelloReply{Message: "Hello " + in.Name}, nil
}

3.调用流程

3.1服务端:

1)Net.listen绑定监听端口和监听模式

2)grpc.Server()注册一个新的grpcServer s

3)将service通过Register{Service}Server(s, &server{})指定到某个会实现该方法的server上

4)调用grpcServer s的Server方法将该service绑定到端口上开始监听

func main() {
    lis, err := net.Listen("tcp", port)
    if err != nil {
        log.Fatalf("failed to listen: %v", err)
    }
    s := grpc.NewServer()
    pb.RegisterGreeterServer(s, &server{})
    s.Serve(lis)

}

3.2客户端

1)coon,err=grpc.Dial(address, grpc.WithInsecure())发起和服务器的连接

2)c:=pb.New{Service}Client(conn)建立一个新的grpc客户端程序,应该也同时请求回了rpc方法

3)调用c的远端过程调用方法

package main

import (
    "log"
    "os"
    pb "your_path_to_gen_pb_dir/helloworld"
    "golang.org/x/net/context"
    "google.golang.org/grpc"
)
const (
    address     = "localhost:50051"
    defaultName = "world"
)

func main() {
    // Set up a connection to the server.
    conn, err := grpc.Dial(address, grpc.WithInsecure())
    if err != nil {
        log.Fatalf("did not connect: %v", err)
    }
    defer conn.Close()
    c := pb.NewGreeterClient(conn)
    // Contact the server and print out its response.
    name := defaultName
    if len(os.Args) > 1 {
        name = os.Args[1]
    }
    r, err := c.SayHello(context.Background(), &pb.HelloRequest{Name: name})
    if err != nil {
        log.Fatalf("could not greet: %v", err)
    }
    log.Printf("Greeting: %s", r.Message)
}

参考资料:

1.https://www.jianshu.com/p/774b38306c30/

2.https://blog.csdn.net/omnispace/article/details/79562630

3.https://studygolang.com/articles/12566

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值