NetCore grpc框架初识

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

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

    1.服务端 

      

      

  <ItemGroup>
    <Protobuf Include="Protos\greet.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 格式生成完毕。

猜你喜欢

转载自www.cnblogs.com/ms_senda/p/12439250.html