go的gRPC看完觉得我又行了。

作者变优秀的小白

Github本文Github源码

CSDNCSDN_Blog

爱好Americano More Ice !

深入浅出的理解 go-gprc

目录

Firstly, What is gRPC?

gRPC中,客户机应用程序可以直接调用另一台计算机上的服务器应用程序上的方法,就好像它是本地对象一样,这使得您更容易创建分布式应用程序和服务。与许多RPC系统一样,gRPC基于定义服务的思想,指定可以用参数和返回类型远程调用的方法。在服务器端,服务器实现此接口并运行gRPC服务器来处理客户端调用。在客户端,客户机有一个存根(在某些语言中称为客户机),它提供与服务器相同的方法。

image.png

话不多说,Code你就知道

配置基本环境

安装两个必须的依赖,我使用的依赖管理是go mod

  1. 下载两个依赖
$ go get google.golang.org/protobuf/cmd/protoc-gen-go@v1.26
$ go get google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.1
复制代码
  1. 更新你的PATH为了protoc编译器能够找到这些插件
$ export PATH="$PATH:$(go env GOPATH)/bin"
# 当然你可以看到你的gopath
$ go env GOPATH
复制代码

官网Doc借Code(草船借箭)

git clone你,你给我就完事

# Doc借Code
$ git clone -b v1.35.0 https://github.com/grpc/grpc-go
# 进入我们拿到的例子目录
$ cd grpc-go/examples/helloworld
# 看看有啥
$ ls
greeter_client greeter_server helloworld
复制代码

运行例子,LET US SEE SEE

初始化

  • 服务端(Server)
# 先启动server
$ go run greeter_server/main.go
复制代码
  • 客户端(Client)
# 再启动client
$ go run greeter_client/main.go
复制代码

运行后

看看两者发生的变化,可以解析下内部运行逻辑

  • 服务端,写好方法后=>新建gRPC服务=>等待client连接
  • 客户端,以安全模式新建连接=>client连接server=>调用server方法
# server
$ go run greeter_server/main.go
2021/05/31 11:54:19 Received: world
# client
$ go run greeter_client/main.go
2021/05/31 11:54:19 Greeting: Hello world
复制代码

更新gRPC服务

更新.proto

打开我们helloworld/helloworld.proto, 加上一行代码

service Greeter {
  rpc SayHello (HelloRequest) returns (HelloReply) {}
  // Add this code
  rpc SayHelloAgain (HelloRequest) returns (HelloReply) {}
}

message HelloRequest {
  string name = 1;
}

message HelloReply {
  string message = 1;
}
复制代码

让我们来重新生成我们的gRPC代码(helloworld/helloworld.pb.go)

$ protoc --go_out=. --go_opt=paths=source_relative \
    --go-grpc_out=. --go-grpc_opt=paths=source_relative \
    helloworld/helloworld.proto
复制代码

执行后,会发现helloworld/helloworld.pb.gohelloworld/helloworld_grpc.pb.go已经更新了

image.png

image.png

更新server

打开helloworld/greeter_server/main.go,新增方法

func (s *server) SayHelloAgain(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) {
	return &pb.HelloReply{Message: "Hello again" + in.GetName()}, nil
}
复制代码

更新client

打开helloworld/greeter_client/main.go,新增调用方法

	r1, err := c.SayHelloAgain(ctx, &pb.HelloRequest{Name: name})
	if err != nil {
		log.Fatalf("could not greet: %v", err)
	}
复制代码

搞定,Run it!

# server
$ go run greeter_server/main.go
# client
$ go run greeter_client/main.go Dean
复制代码

看下输出内容

# server
2021/05/31 15:32:45 Received: Dean
# client
2021/05/31 15:32:45 Greeting: Hello Dean
2021/05/31 15:32:45 Greeting: Hello againDean
复制代码

结束语:如果遇到什么疑问或者建议的,可直接留言评论!作者看到会马上一一回复

如果觉得小白此文章不错或对你有所帮助,期待你的一键三连?!❤️ ni ~

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享