什么是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 = ;
enum Language{
en_us = ; //枚举必须以0开始
zh_cn = ;
}
Language languageEnum = ;
} // The response message containing the greetings.
message HelloReply {
string message = ;
int32 num = ;
int32 adsa = ;
}

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/

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

  1. ASP.NET Core 3.0 gRPC 双向流

    目录 ASP.NET Core 3.0 使用gRPC ASP.NET Core 3.0 gRPC 双向流 ASP.NET Core 3.0 gRPC 认证授权 一.前言 在前一文 <ASP.NE ...

  2. ASP.NET Core 3.0 gRPC 拦截器

    目录 ASP.NET Core 3.0 使用gRPC ASP.NET Core 3.0 gRPC 双向流 ASP.NET Core 3.0 gRPC 拦截器 一. 前言 前面两篇文章给大家介绍了使用g ...

  3. ASP.NET Core 3.0 gRPC 身份认证和授权

    一.开头聊骚 本文算是对于 ASP.NET Core 3.0 gRPC 研究性学习的最后一篇了,以后在实际使用中,可能会发一些经验之文.本文主要讲 ASP.NET Core 本身的认证授权和gRPC接 ...

  4. ASP.NET Core 3.0 gRPC 配置使用HTTP

    前言 gRPC是基于http/2,是同时支持https和http协议的,我们在gRPC实际使用中,在内网通讯场景下,更多的是走http协议,达到更高的效率,下面介绍如何在 .NET Core 3.0 ...

  5. ASP.NET Core 3.0 使用gRPC

    一.简介 gRPC 是一个由Google开源的,跨语言的,高性能的远程过程调用(RPC)框架. gRPC使客户端和服务端应用程序可以透明地进行通信,并简化了连接系统的构建.它使用HTTP/2作为通信协 ...

  6. [翻译] ASP.NET Core 3.0 的新增功能

    ASP.NET Core 3.0 的新增功能 全文翻译自微软官方文档英文版 What's new in ASP.NET Core 3.0 本文重点介绍了 ASP.NET Core 3.0 中最重要的更 ...

  7. [翻译] 初看 ASP.NET Core 3.0 即将到来的变化

    [翻译] 初看 ASP.NET Core 3.0 即将到来的变化 原文: A first look at changes coming in ASP.NET Core 3.0 在我们努力完成下一个 m ...

  8. ASP.NET Core 3.0 上的gRPC服务模板初体验(多图)

    早就听说ASP.NET Core 3.0中引入了gRPC的服务模板,正好趁着家里电脑刚做了新系统,然后装了VS2019的功夫来体验一把.同时记录体验的过程.如果你也想按照本文的步骤体验的话,那你得先安 ...

  9. 从头编写 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的相 ...

随机推荐

  1. Ueditor1.3.6 setContent的一个bug

    Baidu Uedtior这个版本的占位标签为script标签,UE.get("editor")操作初始化编辑器,这个初始化动作似乎是个异步动作,在这个语句之后如果setConte ...

  2. 循环神经网络(RNN)--学习笔记

    一.基本概念 RNN针对的数据是时序数据.RNN它解决了前馈神经网络,无法体现数据时序关系的缺点.在RNN网络中,不仅同一个隐含层的节点可以相互连接,同时隐含层的输入不仅来源于输入层的输入还包括了上一 ...

  3. Spring JTA multiple resource transactions in Tomcat with Atomikos example

    http://www.byteslounge.com/tutorials/spring-jta-multiple-resource-transactions-in-tomcat-with-atomik ...

  4. Flask入门之结构重组(瘦身)-第13讲笔记

    1. pip list Flask 0.10.1 Flask-Bootstrap 3.3.5.6 Flask-SQLAlchemy 2 Flask-Script 2.0.5 Flask-WTF 0.1 ...

  5. 用Python+qrcode库创建一个包含信息的二维码

    安装qrcode库和PIL库 在命令行中分别输入pip install qrcode 和pip install pillow 导入库格式如下: import PIL import qrcode 下面以 ...

  6. TX2 安装 ROS 依赖库错误解决办法

    一.更换ubuntu 16.04 更新源 1. 更新源 deb http://mirrors.ustc.edu.cn/ubuntu-ports/ xenial main multiverse rest ...

  7. linux进程、线程与cpu的亲和性(affinity)

    参考:http://www.cnblogs.com/wenqiang/p/6049978.html 最近的工作中对性能的要求比较高,下面简单做一下总结: 一.什么是cpu亲和性(affinity) C ...

  8. PAT1009:Product of Polynomials

    1009. Product of Polynomials (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yu ...

  9. 在webpack里使用jquery.mCustomScrollbar插件

    malihu-custom-scrollbar-plugin是一个依赖jquery的自定义网页滚动条样式插件 网站:http://manos.malihu.gr/jquery-custom-conte ...

  10. 基于gtid的复制

    Ⅰ.GTID的介绍 global transaction id identifier 全局事务id gtid = server_uuid + transaction_id server_uuid是全局 ...