• gRPC学习一【基础】


    一、简介

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

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

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

           优点:

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

     7、源码下载

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

  • 相关阅读:
    GridView
    BaseAdapter
    ArrayAdapter,SimpleAdapter
    消息机制,Handler
    进度条对话框
    随机二选一
    (二十五)WebDriver API之上传文件
    (二十四)WebDriver API之警告框处理
    linux常用命令大全
    (二十三)WebDriver API之多窗口切换
  • 原文地址:https://www.cnblogs.com/xiaobaicai12138/p/16285130.html
Copyright © 2020-2023  润新知