.Net Core gRPC入门(一)——项目搭建、服务端、客户端

gRPC简介

在学习之前,需要先了解gRPC是做什么的,学习的目的以及能够解决什么问题,为什么选择gRPC?

gRPC以及RPC框架

       gRPC是一款成熟的RPC框架,具有跨语言支持双向流Protobuf二进制序列化等优点。
       RPC框架的作用是从一台机器(客户端)上通过参数传递的方式调用另一台机器(服务器)上的一个函数或方法(可以统称为服务)并得到返回的结果,简单来说就是远程过程调用

远程过程调用

常用的远程过程调用方式有REST、SOAP、RPC。

  • REST基于HTTP进行调用,如GET\POST\PUT,在浏览器端可直接调用。
  • SOAP基于Xml封装成了HTTP协议,在VS中可直接添加服务引用,在浏览器端可直接调用。
  • RPC可基于TCP和HTTP通讯,在VS中可直接添加服务引用。
RPC服务结构
  • 服务端:提供对客户端开放的服务
  • 客户端:调用服务端提供的服务

一、创建服务端项目

新建一个空白解决方案,命名为GrpcDemo
新建空白解决方案
创建后 右键 > 添加 > 新建项目 > grpc,取名为GrpcDemo.Service
新建grpc服务

gRPC项目结构

gRPC项目结构
项目中包含

  • 添加了Grpc.AspNetCore引用
  • 包含greet.proto文件
  • 包含GreeterService服务
greet.proto
syntax = "proto3";

option csharp_namespace = "GrpcDemo.Service";

package greet;

// The greeting service definition.
service Greeter {
  // Sends a greeting
  rpc SayHello (HelloRequest) returns (HelloReply);
}

// The request message containing the user's name.
message HelloRequest {
  string name = 1;
}

// The response message containing the greetings.
message HelloReply {
  string message = 1;
}

proto文件用于定义服务与数据结构,是一种高效数据交换格式,相对于Json,Protobuf有更高的转化效率,时间效率和空间效率都是JSON的3-5倍。

文件描述:

  • syntax 标识Protobuf版本为v3
  • option csharp_namespace 标识生成C#类的命名空间
  • package 标识proto文件的命名空间
  • service 定义服务
  • rpc FuncName (Input) returns (Output) 定义一个远程过程
  • message 声明数据结构

如上所示,在文件中定义了Greeter服务,包含一个SayHello过程,参数是HelloRequest,返回结果为HelloReply。

GreeterService.cs
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
        });
    }
}

GreeterService继承于自动生成的Greeter.GreeterBase,实现了SayHello方法。

Startup.cs
public void ConfigureServices(IServiceCollection services)
{
	//添加Grpc服务
    services.AddGrpc();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    //...省略
    app.UseEndpoints(endpoints =>
    {
    	//添加GreeterService服务终结点
        endpoints.MapGrpcService<GreeterService>();
        //...省略
    });
}

添加Grpc服务、添加GreeterService服务终结点。


二、创建客户端项目

新建控制台项目,命名为GrpcDemo.Client
GrpcDemo.Client

1. 添加Nuget包

工具 > Nuget包管理器 > 程序包管理控制台 > 设置默认项目为GrpcDemo.Client

输入以下命令

Install-Package Google.Protobuf
Install-Package Grpc.Tools
Install-Package Grpc.Net.Client

2. 添加Proto文件

右键GrpcDemo.Client项目 > 编辑项目文件

在Project内添加

<ItemGroup>
  <!--添加GrpcDemo.Service的proto文件-->
  <Protobuf Include="..\GrpcDemo.Service\Protos\*.proto" GrpcServices="Client" Link="Protos\%(RecursiveDir)%(Filename)%(Extension)" />
</ItemGroup>

3. 请求服务端

修改Program.cs

static void Main(string[] args)
{
    //创建grpc通道
    var channel = GrpcChannel.ForAddress("https://localhost:5001");
    //创建Greeter服务客户端
    var greetClient = new Greeter.GreeterClient(channel);
    //请求SayHello并且传参
    HelloReply reply = greetClient.SayHello(new HelloRequest()
    {
        Name = "Yuwei"
    });
    //输出返回结果
    Console.WriteLine(reply.Message);
}

三、运行并查看结果

右键解决方案 > 设置启动项目 > 多个启动项目 > 将Service和Client设置为启动 > 启动

输出:

Hello Yuwei

输出
可以看到,Client发起了HTTP/2 POST请求,服务端返回了Hello Yuwei,运行成功。


参考资料

微软官方Grpc教程
Grpc英文文档

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
.NET Core是微软开源的跨平台框架,可以用于构建Web应用程序、Web API、微服务和其他类型的应用程序。gRPC是一种高性能、开源的远程过程调用(RPC)框架,它使用Protocol Buffers作为序列化协议。 在.NET Core中,可以使用gRPC框架来构建高性能、跨平台的微服务。gRPC框架提供了基于Protocol Buffers的定义和代码生成工具,使得开发人员可以轻松地定义和实现RPC接口。gRPC框架还提供了基于HTTP/2的双向流式传输,这意味着客户端和服务器可以同时发送和接收多个消息,从而提高了系统的吞吐量和性能。 使用gRPC框架开发微服务的步骤如下: 1. 定义gRPC服务:使用Protocol Buffers定义接口和消息类型。 2. 生成代码:使用gRPC工具生成客户端和服务器端代码。 3. 实现服务:实现服务器端接口。 4. 创建客户端:创建gRPC客户端并调用服务。 .NET Core提供了丰富的工具和库来支持gRPC开发,包括: 1. gRPC工具:可以使用gRPC工具从Protocol Buffers文件生成代码。 2. gRPC.AspNetCore:可以使用gRPC.AspNetCore库在ASP.NET Core应用程序中托管gRPC服务。 3. gRPC.Net.Client:可以使用gRPC.Net.Client库创建gRPC客户端。 4. gRPC.Tools:可以使用gRPC.Tools库在Visual Studio中集成gRPC工具。 总之,.NET Core提供了完整的支持gRPC的框架和工具,使得开发人员可以轻松地构建高性能、跨平台的微服务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值