这是我参与「第五届青训营 」笔记创作活动的第 8 天
一、本堂课重点内容
- 有关gRPC服务端编写和客户端编写的quick start,用于理解gRPC的基本内容
二、详细知识点介绍
服务端编写
-
创建gRPC Server对象,你可以理解为Server端的抽象对象
-
将 server (其包含需要被调用的服务端接口) 注册到 gRPC Server 的内部注册中心
这样可以在接受到请求时,通过内部的服务发现,发现该服务端接口并转接进行逻辑处理
-
创建 Listen,监听TCP端口
-
gRPC Server 开始 lis.Accept,直到 Stop
下面给出以之前写的Hello服务为例,实现以下服务端的编写
// 实现生成代码中未实现的服务
// hello Server
type server struct {
pb.UnimplementedSayHelloServer
}
func (s *server) SayHello(ctx context.Context, req *pb.HelloRequest) (*pb.HelloResponse, error) {
return &pb.HelloResponse{ResponseMsg: "hello" + req.RequestName}, nil
}
注册并开启rpc服务
func main() {
// 开启端口
listen, err := net.Listen("tcp", ":9090")
if err != nil {
panic("port open failed")
}
// 创建grpc服务
grpcServer := grpc.NewServer()
// 在grpc服务端中注册我们自己编写的服务
pb.RegisterSayHelloServer(grpcServer, &server{})
// 启动服务
err = grpcServer.Serve(listen)
if err != nil {
panic("service open failed")
}
}
客户端编写
- 创建与给定目标(服务端)的连接交互
- 创建 server 的服务端对象
- 发送 RPC 请求,请求同步响应,得到回调后返回响应结果
- 输出响应结果
同样以刚刚的Hello服务为例,编写一下客户端侧的代码demo
func main() {
// 连接服务
// 第二个参数为安全配置(这里新建了空的加密配置,即不进行安全加密)
conn, err := grpc.Dial("127.0.0.1:9090", grpc.WithTransportCredentials(insecure.NewCredentials()))
if err != nil {
panic("fail to connect server")
}
// 关闭grpc连接,都记得关闭!
defer conn.Close()
// 与服务端建立连接
client := pb.NewSayHelloClient(conn)
resp, _ := client.SayHello(context.Background(),
&pb.HelloRequest{
RequestName: "二火",
})
fmt.Println(resp.GetResponseMsg())
}
我们分别启动服务端和客户端,可以看见:
三、实践练习例子
实践的部分代码也已经贴在上面了,以及这里是GitHub
四、课后个人总结
其实我对于gRPC的学习已经基本快速入门了! (笔记只上传一点才不是要水笔记呢!)
这几天没课的时候,将会连载gRPC以及有关网络相关的文章~
除了字节官方推荐的Kitex,gRPC或许能成为你的选择~