zoukankan      html  css  js  c++  java
  • NetCore grpc框架初识

         作为B-S架构的软件开发遵循一定原则,其中调用接口要求轻协议,所以Restfull Api 就开始受到广泛推,但是作为http协议的代码在调用的时候往往需要通过httpRequest等网络请求模式 并且返回的数据都是       基于html/text 的格式一般以JSON格式返回,但因为这样调用方式并不友好,因此remote api 顺应了发展趋势(类似WCF WebService )但WCF Websevice 往往又比较重协议。

          废话不多说先上一段代码来演示grpc的应用。

        1.服务端 

          

          

      <ItemGroup>
        <Protobuf Include="Protosgreet.proto" GrpcServices="Server" />
      </ItemGroup>

    在项目文件中增加上述配置,并编译项目,然后添加如下服务代码

        public class GreeterService : Greeter.GreeterBase
        {
            private readonly ILogger<GreeterService> _logger;
            public GreeterService(ILogger<GreeterService> logger)
            {
                _logger = logger;
            }
    
            public override Task<HelloReply> SayHello(HelloRequest request, ServerCallContext context)
            {
                return Task.FromResult(new HelloReply
                {
                    Message = "Hello " + request.Name
                });
            }
        }
    }

    Greeter.GreeterBase 是基于 greet.proto 的模板生成的代码。至此服务端代码生成完毕。
     
    //在启动页增加终结点配置。
        app.UseEndpoints(endpoints =>
                {
                    endpoints.MapGrpcService<GreeterService>();
    
                    endpoints.MapGet("/", async context =>
                    {
                        await context.Response.WriteAsync("Communication with gRPC endpoints must be made through a gRPC client. To learn how to create a client, visit: https://go.microsoft.com/fwlink/?linkid=2086909");
                    });
                });

     启动服务

     客户端调用grpc 服务

      创建一个控制台客户端,并且通过nuget 引用 Google.Protobuf Grpc.Net.Client  Grpc.Tools 包,然后编译代码生成

     

      class Program
        {
            static async Task Main(string[] args)
            {
                var channel = GrpcChannel.ForAddress("https://localhost:5001");
                var client = new Greeter.GreeterClient(channel);
                var reply = await client.SayHelloAsync(
                    new HelloRequest { Name = "老毛" });
    
                Console.WriteLine("Greeter 服务返回数据: " + reply.Message);
                Console.ReadKey();
            }
        }

    运行控制台,至此一个由客户端调用grpc 远程服务的 web api 格式生成完毕。

  • 相关阅读:
    BZOJ2705: [SDOI2012]Longge的问题 欧拉函数
    BZOJ3884: 上帝与集合的正确用法 拓展欧拉定理
    BZOJ1296: [SCOI2009]粉刷匠 DP
    BZOJ5293: [Bjoi2018]求和 树上差分
    BZOJ1398: Vijos1382寻找主人 Necklace 字符串最小表示法
    BZOJ5189: [Usaco2018 Jan]Cow at Large 贪心+LCA
    BZOJ2654: tree 二分答案+最小生成树
    BZOJ1304: [CQOI2009]叶子的染色 树形dp
    BZOJ1632: [Usaco2007 Feb]Lilypad Pond SPFA+最短路计数
    BZOJ1726: [Usaco2006 Nov]Roadblocks第二短路 K短路
  • 原文地址:https://www.cnblogs.com/ms_senda/p/12439250.html
Copyright © 2011-2022 走看看