asp.net core 3.0 gRPC框架小试

什么是gRPC

gRPC是google开源的一个高性能、跨语言的RPC框架,基于HTTP2协议,采用ProtoBuf 定义的IDL。

gRPC 的主要优点是:

  • 现代高性能轻量级 RPC 框架。
  • 协定优先 API 开发,默认使用协议缓冲区,允许与语言无关的实现。
  • 可用于多种语言的工具,以生成强类型服务器和客户端。
  • 支持客户端、服务器和双向流式处理调用。
  • 使用 Protobuf 二进制序列化减少对网络的使用。

这些优点使 gRPC 适用于:

  • 效率至关重要的轻量级微服务。
  • 需要多种语言用于开发的 Polyglot 系统。
  • 需要处理流式处理请求或响应的点对点实时服务。

更多介绍请前往 https://grpc.io/docs/guides/

开始

netcore3.0中已经加入了gRPC的模板项目.

1,打开vs2019,创建一个asp.net core web项目

2,选择ASP.NET Core 3.0就会出现gRPC模板,点击创建。

如果没安装core3的SDK请前往https://dotnet.microsoft.com/download/dotnet-core/3.0下载最新版本安装,

如果你已经安装了core 3.0的SDK却还是无法显示其选项,工具 > 选项 ,勾选“使用 .NET Core SDK 预览版”

3,模板只有一个服务端项目,需要自行创建一个客户端来做演示,创建一个.netcore的控制台程序即可。

客户端需要安装以下三个包

服务端代码

greet.proto,proto相关语法只是,前往 https://developers.google.com/protocol-buffers/docs/proto3,可能需要梯子。

syntax = "proto3";

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;
  enum Language{
    en_us = 0; //枚举必须以0开始
    zh_cn = 1;
  }
  Language languageEnum = 2;
}

// The response message containing the greetings.
message HelloReply {
  string message = 1;
  int32 num = 2;
  int32 adsa = 3;
}

GreeterService

public class GreeterService : Greeter.GreeterBase
{
    public override Task<HelloReply> SayHello(HelloRequest request, ServerCallContext context)
    {
        var greeting = string.Empty;
        switch (request.LanguageEnum)
        {
            case HelloRequest.Types.Language.EnUs:
                greeting = "Hello";
                break;
            case HelloRequest.Types.Language.ZhCn:
                greeting = "你好";
                break;
        }

        return Task.FromResult(new HelloReply
        {
            Message = $"{greeting} {request.Name}",
            Num = new Random().Next()
        });
    }
}

客户端代码

添加greet.proto文件,将Protos\greet.proto文件从服务端复制到客户端项目。将greet.proto文件路径添加到项目文件GrpcDemo.Client.csproj的<ItemGroup>节点内。

这里我们不复制,直接定位到相关路径即可。

GrpcDemo.Client.csproj

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp3.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Google.Protobuf" Version="3.7.0" />
    <PackageReference Include="Grpc.Core" Version="1.20.1" />
    <PackageReference Include="Grpc.Tools" Version="1.20.1">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
    </PackageReference>
    <!-- Include支持*匹配 -->
    <!-- GrpcServices="Client"添加该属性构建相关客户端类文件(元数据) -->
    <Protobuf Include="..\GrpcDemo.Server\Protos\*.proto" GrpcServices="Client" />
  </ItemGroup>

</Project>

Program.cs

static async Task Main(string[] args)
{
    var serverAddress = "localhost:50051";
    //创建连接通道,端口80
    var channel = new Channel(serverAddress, ChannelCredentials.Insecure);
    var client = new Greeter.GreeterClient(channel);

    //请求
    var reply1 = await client.SayHelloAsync(
        new HelloRequest { Name = "wu", LanguageEnum = HelloRequest.Types.Language.EnUs });
    Console.WriteLine($"{reply1.Message} Num:{reply1.Num}");
    var reply2 = await client.SayHelloAsync(
        new HelloRequest { Name = "wu", LanguageEnum = HelloRequest.Types.Language.ZhCn });
    Console.WriteLine($"{reply2.Message} Num:{reply2.Num}");

    //使用完后应释放资源
    await channel.ShutdownAsync();
    Console.WriteLine("已断开连接");
    Console.WriteLine("Press any key to exit...");
    Console.ReadKey();
}

运行

Demo地址 https://github.com/wwwu/GrpcDemo

参考文档

https://docs.microsoft.com/zh-cn/aspnet/core/grpc/?view=aspnetcore-3.0

https://developers.google.com/protocol-buffers/docs/proto3

https://grpc.io/docs/guides/

原文地址:https://www.cnblogs.com/wu_u/p/10783168.html

时间: 2024-07-31 00:35:00

asp.net core 3.0 gRPC框架小试的相关文章

【转载】从头编写 asp.net core 2.0 web api 基础框架 (1)

工具: 1.Visual Studio 2017 V15.3.5+ 2.Postman (Chrome的App) 3.Chrome (最好是) 关于.net core或者.net core 2.0的相关知识就不介绍了, 这里主要是从头编写一个asp.net core 2.0 web api的基础框架. 我一直在关注asp.net core 和 angular 2/4, 并在用这对开发了一些比较小的项目. 现在我感觉是时候使用这两个技术去为企业开发大一点的项目了, 由于企业有时候需要SSO(单点登

基于 ASP.NET Core 2.0 WebAPI 后台框架搭建(0) - 目录概述

概述 博主自毕业后,进公司就一直是以ASP.NET MVC 5.0 + MySQL 进行项目开发,在项目也使用了很多常用功能,如 WCF.SignalR.微信公众号API.支付宝API.Dapper等等,前端是大杂烩,如:Bootstrap.AmazeUI.EasyUI.Light7.WeUI等等.其实对于我们公司的项目来说,技术栈虽说不庞大,但五脏俱全,而且基于这一套技术,开发速度有保证.但是,作为一个有梦想的程序猿,必须与时俱进,因此无意中接触了.Net Core 2.0.听说它是开源的?它

基于 ASP.NET Core 2.0 WebAPI 后台框架搭建(1) - 依赖注入三层框架搭建

概述 本文章描述如何搭建 ASP.NET Core 2.0 WebAPI 依赖注入三层架构,为什么要加入依赖,并不是为了提供程序性能,而是为了项目间解耦,项目之间能够更加独立. 微软爸爸官方说明文档:在 ASP.NET Core 依赖注入 全面理解 ASP.NET Core 依赖注入 步骤 1. 新建解决方案,添加一个ASP.NET Core WebApi应用 2. 添加四个.Net Core类库:Entity.BLL.DAL.Common 3. 按照以下截图进行解决方案布局 4. 添加DAL层

基于 ASP.NET Core 2.0 WebAPI 后台框架搭建(4) - EF Core CodeFirst 数据库创建

概述 在 基于 ASP.NET Core 2.0 WebAPI 后台框架搭建(2) - EF Core (MySQL) CodeFirst 数据库迁移与依赖注入 一文中,我们介绍如何快速以CodeFirst快速搭建数据库,这一章,我们来完善一下创建数据库中可以添加的验证与约束. 微软爸爸官方文档:Entity Framework Core 数据库操作 (1) 数据库迁移  add-migration [任一名称,须唯一] (2) 更新数据库  update-database (3) 删除数据库迁

从头编写 asp.net core 2.0 web api 基础框架 (4) EF配置

原文:从头编写 asp.net core 2.0 web api 基础框架 (4) EF配置 第1部分:http://www.cnblogs.com/cgzl/p/7637250.html 第2部分:http://www.cnblogs.com/cgzl/p/7640077.html 第3部分:http://www.cnblogs.com/cgzl/p/7652413.html Github源码地址:https://github.com/solenovex/Building-asp.net-co

从头编写 asp.net core 2.0 web api 基础框架 (5) EF CRUD

原文:从头编写 asp.net core 2.0 web api 基础框架 (5) EF CRUD 第1部分:http://www.cnblogs.com/cgzl/p/7637250.html 第2部分:http://www.cnblogs.com/cgzl/p/7640077.html 第3部分:http://www.cnblogs.com/cgzl/p/7652413.html 第4部分:http://www.cnblogs.com/cgzl/p/7661805.html Github源码

从头编写 asp.net core 2.0 web api 基础框架 (3)

原文:从头编写 asp.net core 2.0 web api 基础框架 (3) 第一部分:http://www.cnblogs.com/cgzl/p/7637250.html 第二部分:http://www.cnblogs.com/cgzl/p/7640077.html Github源码地址:https://github.com/solenovex/Building-asp.net-core-2-web-api-starter-template-from-scratch 之前我介绍完了asp

从头编写 asp.net core 2.0 web api 基础框架 (2)

原文:从头编写 asp.net core 2.0 web api 基础框架 (2) 上一篇是: http://www.cnblogs.com/cgzl/p/7637250.html Github源码地址是: https://github.com/solenovex/Building-asp.net-core-2-web-api-starter-template-from-scratch 本文讲的是里面的Step 2. 上一次, 我们使用asp.net core 2.0 建立了一个Empty pr

从头编写 asp.net core 2.0 web api 基础框架 (1)

原文:从头编写 asp.net core 2.0 web api 基础框架 (1) 工具: 1.Visual Studio 2017 V15.3.5+ 2.Postman (Chrome的App) 3.Chrome (最好是) 关于.net core或者.net core 2.0的相关知识就不介绍了, 这里主要是从头编写一个asp.net core 2.0 web api的基础框架. 我一直在关注asp.net core 和 angular 2/4, 并在用这对开发了一些比较小的项目. 现在我感