所谓RPC(远程过程调用远程过程调用)框架实际是提供了一套机制,使得应用程序之间可以进行通信,而且也遵从服务器/客户端模型。使用的时候客户端调用服务器端提供的接口就像是调用本地的函数一样。
与许多RPC系统一样,gRPC基于定义服务的思想,指定可以使用其参数和返回类型远程调用的方法。默认情况下,gRPC使用协议缓冲区作为接口定义语言(IDL)来描述服务接口和有效负载消息的结构。
既然是服务器/客户端模型,那么我们直接用restful api不是也可以满足吗,为什么还需要RPC呢?下面我们就来看看RPC到底有哪些优势
gRPC和restful API都提供了一套通信机制,用于服务器/客户端模型通信,而且它们都使用http作为底层的传输协议(严格地说,gRPC使用的http2.0,而restful API则不一定)。不过gRPC还是有些特有的优势,如下:
但是,通常我们不会去单独使用gRPC,而是将gRPC作为一个部件进行使用,这是因为在生产环境,我们面对大并发的情况下,需要使用分布式系统来去处理,而gRPC并没有提供分布式系统相关的一些必要组件。而且,真正的线上服务还需要提供包括负载均衡,限流熔断,监控报警,服务注册和发现等等必要的组件。不过,这就不属于本篇文章讨论的主题了,我们还是先继续看下如何使用gRPC。
mac: <代码>酿造安装protobuf
窗口:protoc下载:官方地址,然后将本路径添加到路径环境变量下去
linux:
安装需要的依赖包:
(root@localhost ~) # yum - y安装autoconf automake libtool卷发使g++解压 root@localhost ~ # protobuf-master.zip解压缩 (root@localhost ~) # cd protobuf-master生成配置文件的脚本文件,如果不执行这步,以下操作将通不过
[root@localhost protobuf-master) #。/任务 [root@localhost protobuf-master] # ./configure 之前可以修改安装目录通过./configure——prefix=命令,统一安装在/usr/地方/protobuf下
[root@localhost protobuf-master] # ./configure——prefix=/usr/地方/protobuf [root@localhost protobuf-master) # [root@localhost protobuf-master] #做检查 [root@localhost protobuf-master] # make install [root@localhost protobuf-master] # ldconfig #刷新缓存共享库。 之前安装成功
[root@localhost protobuf-master] # protoc -我=?猚pp_out=?test.proto 之前<>强安装grpc包
去- u github.com/golang/protobuf/{原型,protoc-gen-go} 去- u google.golang.org/grpc protoc——go_out=插件=grpc:。* .proto