作者:变优秀的小白
Github:本文Github源码
CSDN:CSDN_Blog
爱好:Americano More Ice !
深入浅出的理解 go-gprc
目录
Firstly, What is gRPC?
在
gRPC
中,客户机应用程序可以直接调用另一台计算机上的服务器应用程序上的方法,就好像它是本地对象一样,这使得您更容易创建分布式应用程序和服务。与许多RPC
系统一样,gRPC
基于定义服务的思想,指定可以用参数和返回类型远程调用的方法。在服务器端,服务器实现此接口并运行gRPC
服务器来处理客户端调用。在客户端,客户机有一个存根(在某些语言中称为客户机),它提供与服务器相同的方法。
话不多说,Code你就知道
配置基本环境
安装两个必须的依赖,我使用的依赖管理是go mod
- 下载两个依赖
$ 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
复制代码
- 更新你的
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.go
和helloworld/helloworld_grpc.pb.go
已经更新了
更新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