当前位置: 首页 > 科技观察

Golang语言gRPC到底是什么?

时间:2023-03-11 20:56:28 科技观察

1。在我们之前的文章《Golang语言gRPC使用的界面设计语言protobuf》中介绍了Golang语言gRPC使用的界面设计语言Protobuf。在这篇文章中,我们开始介绍主角——谷歌开源的RPC框架gRPC。在正式介绍gRPC之前,我们先简单介绍一下什么是RPC。是RemoteProcedureCall的缩写,中文译为远程过程调用(也译为远程方法调用或远程调用)。可以实现调用远程服务和调用本地服务一样简单,不用担心跨网络、跨平台、跨语言等问题。gRPC是一种基于HTTP/2的通信协议,支持多语言RPC框架。它使用Protobuf作为其界面设计语言(IDL)。它可以通过protoc工具生成Golang语言结构、服务端接口和客户端Stub。gRPC消息序列化方式通常使用Protobuf,它是二进制格式,体积小,网络传输速度快,占用带宽和流量少,调用性能较高,但可读性较差。不过,gRPC也支持JSON序列化。《图片来源:https://grpc.io/img/landing-2.svg》2.如何使用gRPC定义服务端gRPC默认使用Protobuf作为界面设计语言,我们可以在.proto文件定义服务,使用rpc和returns关键字定义指定请求参数和返回结果的方法。示例代码:serviceUser{rpcLogin(LoginRequest)returns(LoginResponse);}messageLoginRequest{stringemail=1;stringpassword=2;}messageLoginResponse{int64id=1;stringname=2;}阅读以上代码,我们使用Protobuf接口设计语言定义A一元RPC服务实现,即客户端向服务器发送请求,服务器返回响应给客户端。此外,gRPC还支持另外三种定义服务的方式,分别是serverstreamingRPC、clientstreamingRPC和bidirectionalstreamingRPC。限于篇幅,我打算在后续文章中详细介绍这四种定义服务的方式,本文不再介绍。gRPC提供了Protobuf编译插件protoc-gen-grpc,用于编译.proto文件,生成服务端和客户端代码。我们只需要在服务端编写实现Api的代码,然后在客户端调用Api即可。3.gRPC客户端的使用方法我们通过protoc编译.proto文件,自动生成服务端和客户端代码后,如果要使用gRPC客户端,我们需要手动编写客户端代码,即实现在服务端Api的业务逻辑代码,然后在客户端调用Api,如下:在服务端,手动编写生成服务端方法的业务逻辑代码,然后运行gRPC服务,接收并处理客户端请求,gRPC服务自动对请求参数进行解码,然后执行服务方法,并自动对返回结果进行编码。在客户端,Stub(也称为存根或客户端)实现了与服务相同的方法,然后客户端可以在本地调用这些方法,将请求参数封装在Protobuf消息类型中,gRPC将请求发送给服务端,并返回服务器的Protobuf序列化响应消息。4小结在本文中,我们介绍了什么是gRPC,如何定义gRPC服务器,以及如何使用gRPC客户端。关于gRPC的更多介绍,建议有兴趣的读者阅读官网文档了解更多。本文转载自微信公众号《Golang语言开发栈》,可通过以下二维码关注。转载本文请联系Golang语言开发栈公众号。