gRPC学习一【基础】

一、简介

       gRPC:由Google开源,跨语言,高性能的远程过程调用(RPC)框架。

       gRPC使客户端和服务器端应用程序可以透明的进行通信,简化连接系统的构建。

       使用HTTP/2作为通信协议,使用Protocol Buffers作为序列化协议。

       优点:

  1. 现在高性能轻量级RPC框架。
  2. 约定优先的API开发,默认使用Protocol Buffers作为描述语言,允许和语言无关的实现;
  3. 可用于多种语言工具,以生成强类型的服务器和客户端;
  4. 支持客户端,服务器双向流调用;
  5. 通过Protocol Buffers二进制序列化减少网络使用;
  6. 使用HTTP/2进行传输。HTTP/1X是文本格式,HTTP/2死活二进制格式

       为什么快:

  1. 使用HTTP/2协议,二进制格式,相对于HTTP/1.1的文本格式,更高效。
  2. 使用多路复用。服务端一个线程可以满足多个客户端的请求。

       使用场景:

  1. 高性能轻量级微服务:gRPC设计为低延时高吞吐量通信,非常适合需要高性能的轻量级微服务。
  2. 多语言混合开发:gRPC工具支持所有流行的开发语言,使gRPC成为多语言开发环境的理想选择。
  3. 点对点实时通信:gRPC对双向流调用提供出色的支持。gRPC服务可以实时推送消息而武勋轮询。
  4. 网络受限环境:使用Protocol Buffers二进制序列化消息,该序列化始终小于等效的json消息,对网络带宽需求比json小。

      不推荐使用场景:

  1. 浏览器可访问的API:浏览器不完全支持gRPC。虽然gRPC-Web可以提供浏览器支持,但是有局限性,引入了服务器代理。
  2. 广播实时通信:gRPC支持通过流进行实时通信,但不存在向已注册连接广播消息的概念。
  3. 进程间通信:进程必须承载HTTP/2才能接受传入的gRPC调用,对于Windows,进程间通信管道是一种更快速的办法。

二、创建ASP.NET Core创建gRPC服务

       VS2019,查询gRPC,快速构建gRPC服务。

       

 

 

   2.1、讲解

          1、appsettings.json文件,配置了Kestrel启用HTTP/2,gRPC基于HTTP/2来通信。

         

 

 

 

          2、PB协议文件greet.proto用于自动生成服务、客户端和消息【表示传递的数据】的C# 类

          

 

 

 

       3、 服务类 GreeterService ,服务类集成的 Greeter.GreeterBase 来自于根据proto文件自动生成的,生成的类在 obj\Debug\netcoreapp3.1目录下

         

 

 

        4、生成的自定义类

        在系统重新生成一遍之后

        

 

 

 

 

 

     5、Startup.cs类,将 gRPC服务添加到了终结点路由中

           

 

 

 6、csproj 项目文件,包含了 proto 文件引用【找到路径后用其他方式打开,比如文本格式或者txt格式】

     

 

 

 7、运行

    

 

 

 三、创建gRPC客户端

       3.1、添加.NET Core控制台应用程序

       框架选择相同的.NET Framework Core 3.1

       

 

 

       3.2、添加Nuget包:Grpc.Net.Client、Google.Protobuf、Grpc.Tools

       3.3、将服务的proto文件复制到客户端,然后重新生成,再打开GrpcClient.csproj文件,修改内容

                

 

 

                修改后:

                 

        3.4、然后重新生成代码,查询生成后的问题。

      

 

      3.5、添加客户端运行代码

     

 

 

 

 

 四、配置同时启动客户端和服务器端,避免相互启动测试麻烦。

 

 五、运行测试

 

 客户端成功调用了服务,收到了返回消息。

  六、优化

     6.1、合并proto

            我们再客户端和服务器端需要复制proto,其实可以合并省略。

            1、复制Protos文件夹到解决方案根目录(sln文件所在目录)

                  

 

 

             2、删除客户端和服务项目中的Protos文件夹

             3、在客户端项目文件csproj中添加proto文件描述

           

 

 

             4、在服务端项目文件csproj中添加proto文件描述

  

 

 

            实际项目中,请自行计算相对路径

            5、这样两个项目都使用一个proto文件,只维护一个文件即可

               

 

 

    6.2、合并多个proto文件

            实际项目,肯定有多个proto文件,不能没添加一个proto文件都去更新csproj文件。可以使用MSBuild变量帮我们完成,我们将csproj项目文件中引入proto文件信息进行修改。

          服务端:

           

 <ItemGroup>
    <Protobuf Include="..\..\Protos\*.proto" GrpcServices="Server" Link="Protos\%(RecursiveDir)%(Filename)%(Extension)" />
  </ItemGroup>

         客户端:

<ItemGroup>
    <Protobuf Include="..\..\Protos\*.proto" GrpcServices="Client" Link="Protos\%(RecursiveDir)%(Filename)%(Extension)" />
  </ItemGroup>

七、源码下载

       https://gitee.com/gbxw12138/g-rpc-demo1.git

八、补充

       Swagger和postman现在也支持gRPC。

       POSTMAN测试gRPC如下:

 

posted on 2022-05-18 16:18  木乃伊人  阅读(327)  评论(0)    收藏  举报

导航