grpc是一个高性能、通用的开源远程过程调用(rpc)框架,基于底层http/2协议标准
和协议层protobuf序列化协议
开发,支持众多的开发语言,由google开源。
grpc也是基于以下理念:定义一个服务,指定其能够被远程调用的方法(包含参数和返回类型)。在服务端实现这个接口,并运行一个 grpc服务器来处理客户端调用。在客户端拥有一个存根能够像服务端一样的方法。
grpc 客户端和服务端可以在多种环境中运行和交互。你可以用java创建一个 grpc 服务端,用 go、python、c# 来创建客户端。
特点:
- 跨语言;
- 基于http/2之上的二进制协议;
- protobuf序列化机制,比json体积小,网络传输快;
- 一个连接上可以多路复用,并发处理多个请求和响应;
- 多种语言的类库实现;
- 服务定义文件和自动代码生成(.proto 文件和 protobuf 编译工具);
- 适合高性能轻量的微服务,一般对外的接口用restful api,内部服务的调用用grpc。grpc是一个分布式服务框架,和以前的webservice,wcf类似;
- grpc还提供了很多扩展点,用于对框架进行功能定制和扩展,例如,通过开放负载均衡接口可以无缝的与第三方组件进行集成对接(zookeeper、域名解析服务、slb 服务等)。
grpc 使用 http/2 作为传输协议。 虽然与 http 1.1 也能兼容,但 http/2 具有许多高级功能:
用于数据传输的二进制组帧协议 - 与 http 1.1 不同,http 1.1 是基于文本的。
对通过同一连接发送多个并行请求的多路复用支持 - http 1.1 将处理限制为一次处理一个请求/响应消息。
双向全双工通信,用于同时发送客户端请求和服务器响应。
内置流式处理,支持对大型数据集进行异步流式处理的请求和响应。
减少网络使用率的标头压缩。
grpc 是轻量型且高性能的。 其处理速度可以比 json 序列化快 8 倍,消息小 60% 到 80%。 在 microsoft windows communication foundation (wcf) 中,grpc 的性能超过经过高度优化的 nettcp 绑定的速度和效率。 与偏向于 microsoft 堆栈的 nettcp 不同,grpc 是跨平台的。
接下来,我们通过一个demo,来学习一下,如何在visual studio 2022中实现grpc功能。
2、创建grpc服务端
2.1、创建grpc服务端项目
1. 打开visual studio 2022,在开始界面中选择“创建新项目”。如下图。
2.或者在菜单上点击文件—>新建—>项目—>弹出“创建新项目”的界面。如下图。
3. visual studio 2022弹出的“创建新项目”的对话框中做如下选择。如下图。
- 在最左边的下拉框中,选择 “c# ,如下图中1处
- 在中间的下拉框中,选择 “所有平台”,如下图2处。
- 在最右边的下拉框中,选择“web”,如下图3处。
- 在下图中4处,选择“asp.net core grpc服务”grpc项目模板,点击“下一步”按钮。
4.在弹出的“配置新项目”的对话框中,如下图,在“项目名称”输入框中,输入“demo.grpcservice”。然后使用鼠标点击“下一步”按钮。
5. 在弹出的“其他信息”的对话框,如下图。在“框架”下拉框中,选择“net 7.0(标准期限支持)”。其他值选择默认值即可。然后使用鼠标点击“创建”按钮。
6.默认项目文件结构,如下图所示:
2.2、项目文件说明
- appsettings.json
我们打开appsettings.json文件,其中有一个protocols
属性,代表基于http2进行通信。
- protos
在创建的项目中,我们会看到有一个名称为protos
的文件夹,该文件夹用于存放proto协议文件,其中的greet.proto是项目默认给我们创建的一个示例文件,它会根据协议自动生成需要的类文件。该协议文件中的具体说明如下图所示:
- services
在创建的项目中,我们会看到有一个名称services
的文件夹,该文件夹用于存放具体的业务实现类(即:服务类),其中的greeterservice.cs是项目默认给我们创建的一个示例文件,具体说明如下图所示:
上述图中的greeter.greeterbase来自greet.proto文件生成的类文件,具体位置如下图所示:
- 注册服务
在visual studio 2022的“解决方案资源管理器”中找到program.cs文件,使用鼠标双击打开program.cs
文件,在这个文件中需要添加grpc服务,同时需要将所有的业务服务进行注册,如下图所示:
发表评论