gRPC真要取代WebApi了,你还学得过来吗?

今年1月份微软曾宣布要实验性的对.NET支持 gRPC-Web,然后在6月份已经正式发布了。这些天尝试了下,真的很强大,不负责任的预言下,RESTful的时代即将过去,而gRPC要成为革命者!先别急眼,下面我来详细说说。

gRPC是什么

可以用官网的一句话来概括:

A high-performance, open-source universal RPC framework

      所谓RPC(remote procedure call 远程过程调用)框架实际是提供了一套机制,使得应用程序之间可以进行通信,而且也遵从server/client模型。使用的时候客户端调用server端提供的接口就像是调用本地的函数一样。如下图所示就是一个典型的RPC结构图。

划重点:开源、高性能、通用。

gRPC是由google开源的,当下社区一片火爆,各种资源层出不穷,未来可期;高性能是其核心杀手锏,其强大的压缩传输通常能省下50%的带宽,是当下移动互联网最追逐的特性,而通用带来了无门槛,这个是之前RESTful依赖的Json最大的法宝。

介绍完gRPC的特性,下面要分析下为什么gRPC能革命当下最火的RESTful!如果还不熟悉gRPC怎么用的小伙伴儿,可以扫码领取下.NET Core下gRPC实战视频集。

技术革新 势不可挡

经历过从WebService和WCF,升级到WebApi过程的开发者心里都清楚,RESTful风格是重要原因,但是能流行起来的根本,还是Json的通用性和轻便性。而这些看家本领在gRPC面前不堪一击。

1

gRPC可以通过protobuf来定义接口,不仅跨语言通用,而且还能严格的接口约束。

2

通过protobuf可以将数据序列化为二进制编码,大幅减少数据传输,从而大幅提高性能。

3

gRPC可以方便地支持流式通信,依赖于Http2.0,为其所不能为。

除了以上优势,gRPC还有个致命的缺陷,限制了其应用场景,就是浏览器不能直接调用gRPC。然而这个问题现在被gRPC-Web解决了(备注:还有一些限制,如双向流不能支持等)!

gRPC-Web for .NET

gRPC-Web 即 gRPC for Web Clients。它是一个 JavaScript 库,使 Web 应用程序能够直接与后端 gRPC 服务通信,不需要 HTTP 服务器充当中介。它旨在使 gRPC 在更多情况下可用,包括但不限于一下几种:

1.   从浏览器调用 ASP.NET Core gRPC 应用程序

2.   JavaScript SPAs

3.   .NET Blazor Web Assembly apps

4.   在 IIS 和 Azure App Service 中托管 ASP.NET Core gRPC 应用程序

5.   从非 .NET Core 平台调用 gRPC —— 在所有 .NET 平台上,HttpClient 均不支持 HTTP/2,而 gRPC-Web 可用于从 Blazor 和 Xamarin 调用 gRPC 服务

根据微软的说法,gRPC 与 JSON 相比具有明显的性能优势。以 Blazor 的默认模板为例,相比 JSON,使用 gRPC 时,在提取数据页面上传输的数据减半,数据大小也从 627 字节减少到 309 字节。

目前,.NET 版 gRPC-Web 现已在 NuGet 上发布:

  1. Grpc.AspNetCore.Web ——  将 gRPC-Web 支持添加到 ASP.NET Core gRPC 服务

  2. Grpc.Net.Client.Web ——  从 .NET 调用 gRPC-Web 端点

继续学习吧

新的时代即将来临,熟悉gRPC是必须的了。然而,gRPC的学习资料,尤其是当下最新版本的,包括gRPC-Web的几乎没有。这里,给大家推荐下由资深架构师Clay老师直播讲解的gRPC集训课,将从gRPC的实战、原理、调优为大家逐一讲解,一站式搞定gRPC占据先机!课程为期3天,7月6日~8日晚上八点至九点半直播教学,这会儿扫码进学习群一律免费学习,群里还有微软MVP和多位架构师大佬为大家答疑解惑,限200名额!

Day1:gRPC实战

1.1 . gRPC服务端+Asp.Net Core调用

1.2  4种流式API应用

1.3  基于gRPC建立分布式架构

Day2:gRPC原理深入

2.1 Http2协议剖析,特性解读 

2.2 流式处理实现原理

2.3 gRPC-Web实战和解析

Day3:gRCP调优

3.1 gRPC集群和负载均衡

3.2鉴权授权和gRPCs

3.3 微服务架构下gRPC

最后再给大家送一波福利,一组《互联网开发核心技能》视频代码资料分享,请扫码领取!


扫描下方二维码,这些资料全部带走

获取本文全套学习资料

扫码添加

领取人数较多,添加以下号码也可免费领取哦!

微信号:18672997769

微软MVP组建的.Net社区

你加入了吗?

微软MVP:Eleven组建

国内首屈一指的.Net活跃社区

完整配套的学习资料

最新最热的技术文章

社区内优质岗位直推

全部免费奉送给大家

优质内容持续更新中

戳以下文章立即获取

????????????

禁止外传!社区内部VIP干货资料自取

(课程视频+面试题+技术专刊+岗位内推)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/308958.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring5 jar包下载

下载地址 https://repo.spring.io/simple/libs-release-local/org/springframework/spring/ Spring5最新版本的下载 选择最新版本5.2.3 下载前两项,解压放入文件夹中 项目中导包 ps:我使用的开发工具是idea 第一步:在file中选择project st…

优化 Azure 成本,实现财务目标

点击上方蓝字关注“汪宇杰博客”原文:Omar Khan General Manager, Microsoft Azure翻译:汪宇杰导语我们的许多客户都面临着如何满足关键 IT 项目的资金需求的困难决策。我们在此共同帮助您实现财务目标。确保 Azure 工作负载的成本得到优化有助于释放资金…

采用config方式灵活配置我们的Quarz.net中的Job,Trigger

经常在项目中遇到定时任务的时候,通常第一个想到的是Timer定时器,但是这玩意功能太弱鸡,实际上通常采用的是专业化的第三方调度框架,比如说Quartz,它具有功能强大和应用的灵活性,我想使用过的人都非常了解&…

对于任给的一张无向带权连通图,求出其最小生成树(C++)

对于任给的一张无向带权连通图,求出其最小生成树。 题目要求: (1)编程创建一幅图 (2)输出创建的图 (3)编写Prim算法代码,实现图的最小生成树求解,且输出最小生成树 (4)编写Kruskal算法代码,实现图的最小生成树求解,且…

使用.Net Core实现的一个图形验证码

SimpleCaptcha是一个使用简单,基于.Net Standard 2.0的图形验证码模块。它的灵感来源于Edi.Wang的这篇文章https://edi.wang/post/2018/10/13/generate-captcha-code-aspnet-core,我将其中生成验证码的代码抽取出来进行封装得到了这个模块。下面介绍一下…

Maven编译项目时报错:不再支持源选项 5。请使用 6 或更高版本。 不再支持目标选项 1.5。请使用 1.6 或更高版本。

在使用Maven编译项目时报错&#xff1a; 不再支持源选项 5。请使用 6 或更高版本。 不再支持目标选项 1.5。请使用 1.6 或更高版本。 在项目pom.xml文件中增加maven编译的jdk版本设置&#xff0c;maven.compiler.source和maven.compiler.target&#xff1a; <properties&…

ABP框架 v3.0 已发布!

我们很高兴地宣布,ABP框架和ABP商业版3.0版已经发布.与常规的2周发布一个版本不同的是, 这个版本用了4周的时间.关闭了119个issue,合并了89个pull request 和主框架仓库中的798次提交.由于这是一个主要版本,它也包括了一些重大更改.不要害怕,这些变化都容易对应,并且下面会详细…

C++实现dijkstra单源最短路径

代码如下: #include <iostream> using namespace std; const int N 30; typedef char ElemType; const double noEdge 99999;class Graph { private:double G[N][N];int vertexN, edgeN;double dist[N];bool vis[N];int path[N];int sv;ElemType data[N];int findMinD…

WPF 框架全构建环境虚拟机硬盘分享

现在 WPF 完全开源了&#xff0c;咱可以构建自己私有的版本。我分享一个虚拟机硬盘给你&#xff0c;只要你下载下来&#xff0c;通过 VMWare 导入&#xff0c;即可无需任何配置&#xff0c;拿到一个能构建 WPF 官方源代码的全构建环境。可以用来只做你的定制版的 WPF 框架现在 …

基于.NetCore3.1搭建项目系列 —— 使用Swagger做Api文档 (下篇)

前言回顾上一篇文章《使用Swagger做Api文档 》&#xff0c;文中介绍了在.net core 3.1中&#xff0c;利用Swagger轻量级框架&#xff0c;如何引入程序包&#xff0c;配置服务&#xff0c;注册中间件&#xff0c;一步一步的实现&#xff0c;最终实现生产自动生产API接口说明文档…

C++ vector容器中用erase函数和迭代器删除重复元素问题分析

第一种写法&#xff1a; #include <iostream> #include <vector> using namespace std;int main() {vector<int>v;v.push_back(888);v.push_back(89);v.push_back(89);v.push_back(89);v.push_back(9999);v.push_back(89);for (std::vector<int>::ite…

基于.NetCore3.1搭建项目系列 —— 使用Swagger做Api文档(上篇)

前言为什么在开发中&#xff0c;接口文档越来越成为前后端开发人员沟通的枢纽呢&#xff1f;随着业务的发张&#xff0c;项目越来越多&#xff0c;而对于支撑整个项目架构体系而言&#xff0c;我们对系统业务的水平拆分&#xff0c;垂直分层&#xff0c;让业务系统更加清晰&…

数据结构-树:根节点、子节点、叶子节点是什么?

前言&#xff1a;这个属于数据结构&#xff1a;树。 下面给个例子图解释&#xff08;根节点、子节点、叶子节点&#xff09;。 上图数字 1、3、7是叶子节点&#xff1b;&#xff08;因为他们下面没有分叉出子节点&#xff0c;所以称为&#xff1a;叶子节点&#xff09;【度为0】…

使用kibana可视化报表实时监控你的应用程序

先结果导向&#xff0c;来看我在kibana dashborad中制作的几张监控图。一&#xff1a;先睹为快1. dashboard1监控几个维度的日志&#xff0c;这么点日志量是因为把无用的清理掉了&#xff0c;而且只接入了部分应用。每日日志总数。每日日志错误数&#xff0c;从log4net中levelE…

[EDA]Quartus II 实验简答题

1&#xff0e;使用 Quartus 编辑波形文件时&#xff0c;界面如下图所示&#xff0c;图中用方框标注的区域&#xff0c;名称是什么&#xff1f;在图中&#xff0c;A、B是输入端口&#xff0c;S是输出端口&#xff0c;要编辑的是哪些信号&#xff1f;为什么。 1&#xff0e;方框标…

基于.NetCore3.1搭建项目系列 —— 使用Swagger导出文档 (补充篇)

前言在上一篇导出文档番外篇中&#xff0c;我们已经熟悉了怎样根据json数据导出word的文档&#xff0c;生成接口文档&#xff0c;而在这一篇&#xff0c;将对上一篇进行完善补充&#xff0c;增加多种导出方式&#xff0c;实现更加完善的导出功能。回顾1. 获取Swagger接口文档的…

[EDA] 给出一个双进程状态机,请把它改为单进程状态机。

给出一个双进程状态机&#xff0c;请把它改为单进程状态机。 解答&#xff1a;

[EDA] 给出一个状态机,请把它的组合进程分为2个,分别命名为COM1和COM2,其中:COM1实现对外的控制信号输出,COM2实现状态译码。

给出一个状态机&#xff0c;请把它的组合进程分为2个&#xff0c;分别命名为COM1和COM2&#xff0c;其中&#xff1a;COM1实现对外的控制信号输出&#xff0c;COM2实现状态译码。 解答&#xff1a;

基于.NetCore3.1搭建项目系列 —— 使用Swagger导出文档 (番外篇)

前言回顾之前的两篇Swagger做Api接口文档&#xff0c;我们大体上学会了如何在net core3.1的项目基础上&#xff0c;搭建一套自动生产API接口说明文档的框架。本来在Swagger的基础上&#xff0c;前后端开发人员在开发生产期间&#xff0c;可以借此进行更加便捷的沟通交流。可是总…

遵守这些原则让你开发效率提高一倍

一、概述在园子里面有很多关于各种技术细节的研究文章&#xff0c;都是比较牛逼的框架研究&#xff1b;但是一直没有看到关于怎么样提高开发效率的文章&#xff0c;大多提高开发效率的文章都是关于自动化等方面的辅助工具类型的&#xff0c;而不是开发中的一些小技巧&#xff1…