栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 软件开发 > 后端开发 > .Net

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

.Net 更新时间:发布时间: 百科书网 趣学号

目录
    • gRPC简介
        • gRPC以及RPC框架
        • 远程过程调用
        • RPC服务结构
    • 一、创建服务端项目
        • gRPC项目结构
        • greet.proto
        • GreeterService.cs
        • Startup.cs
    • 二、创建客户端项目
        • 1. 添加Nuget包
        • 2. 添加Proto文件
        • 3. 请求服务端
    • 三、运行并查看结果
    • 参考资料

gRPC简介

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

gRPC以及RPC框架

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

远程过程调用

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

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

一、创建服务端项目

新建一个空白解决方案,命名为GrpcDemo

创建后 右键 > 添加 > 新建项目 > grpc,取名为GrpcDemo.Service

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 _logger;
    public GreeterService(ILogger logger)
    {
        _logger = logger;
    }

    public override Task 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();
        //...省略
    });
}

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


二、创建客户端项目

新建控制台项目,命名为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内添加


  
  


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英文文档

转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/1066024.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号