AICon上海|与字节、阿里、腾讯等企业共同探索Agent 时代的落地应用 了解详情
写点什么

微软发布 gRPC-Web 实现,可直接在浏览器端调用 gRPC 服务

  • 2020-07-06
  • 本文字数:1032 字

    阅读完需:约 3 分钟

微软发布gRPC-Web实现,可直接在浏览器端调用gRPC服务

最近,微软发布了.NET 的 gRPC-Web 协议实现。该组件最初是作为一个实验特性,现在是grpc-dotnet项目的一部分。有了该组件,就可以在浏览器中使用 gRPC,Web 应用程序可以不通过 HTTP 代理服务器直接与 gRPC 服务通信。


gRPC最初由谷歌开发,是一个高性能远程过程调用框架,基于 HTTP/2 实现。但由于浏览器没有直接暴露 HTTP/2,所以 Web 应用程序不能直接使用 gRPC。gRPC- Web 是一个标准化协议,它解决了这个问题,可以在浏览器中使用 gRPC。


今年早些时候,微软宣布将 gRPC-Web 作为一个实验项目。当时,ASP.NET Core 首席软件工程师 James Newton-King 表示该项目并不是一个正式项目:


我们想测试一下我们的 gRPC-Web 实现,并获取反馈,看看与使用代理相比,这种方法对.NET 开发人员来说是否有用。


第一个 gRPC-web 实现是在 2018 年作为一个JavaScript库发布的,Web 应用程序可以通过它直接与 gRPC 服务通信,无需使用 HTTP 服务器作为代理。其原理是创建与 HTTP/1.1 和 HTTP/2 兼容的端到端 gRPC 管道,然后浏览器发送常规的 HTTP 请求,位于浏览器和服务器之间的 gRPC-Web 代理对请求和响应进行转换。与 gRPC 类似,gRPC-Web 在 Web 客户端和后端 gRPC 服务之间使用预定义的契约。Protocol Buffers 被用来序列化和编码消息(尽管也可以使用其他编码器)。



图片来源:gPRC官网


有了这个新组件,.NET Blazor WebAssembly 应用程序和 JavaScript SPA 就可以从在浏览器里直接调用 ASP.NET Core gRPC 应用程序。他们还提供了一个替代在 IIS 和 Azure App Service 服务器上托管 ASP.NET Core gRPC 应用程序的方案,因为它们目前都不能托管 gRPC 服务。


不过,在浏览器端使用 gRPC-Web 调用 gRPC 服务存在一些限制:不支持客户端流和双向流调用,并且跨域调用 gRPC 服务需要在服务器端配置 CORS。另外,gRPC 服务器端必须配置为支持 gRPC-Web,或者必须有第三方服务代理(例如Envoy)在浏览器和服务器之间对调用进行转换。


在新的版本中,微软更新了原始的项目文档,并公开了一个 gRPC-Web示例应用程序。gRPC-Web 在 NuGet 上有两个独立的包:Grpc.AspNetCore.Web(向 ASP.NET Core gRPC 服务添加 gRPC-Web 支持)和gRPC.NET.Client.Web(可在.NET 中调用 gRPC-Web 端点)。该组件需要 3.1 或更高版本的.NET Core SDK,可在 Visual Studio 2019(16.4 或更高版本)、Visual Studio Code 和 Visual Studio for Mac(8.4 或更高版本)中使用。更多有关 gRPC-Web 的信息可以在这里找到。


原文链接


Microsoft Releases gRPC-Web for .NET


2020-07-06 14:0116115

评论

发布
暂无评论
发现更多内容

大厂算法面试之leetcode精讲23.并查集

全栈潇晨

算法 LeetCode

【LeetCode】截断句子Java题解

Albert

算法 LeetCode 12月日更

react源码解析18事件系统

buchila11

React React Hooks

Go语言学习查缺补漏ing Day4

恒生LIGHT云社区

编程语言 Go 语言

给弟弟的信第5封|从高中到大学的体会

大菠萝

28天写作

关于RocketMQ事务方面Demo

Flutter开发:TextField常用属性的使用

三掌柜

28天写作 12月日更

Flutter 动画【Flutter专题16】

坚果

flutter 28天写作 签约计划第二季 12月日更

从微服务架构的现状和未来看学习路径

博文视点Broadview

华云大咖说 | 华云校园信创云解决方案

华云数据

华云数据

Git进阶(十一):Git 常用操作汇总

No Silver Bullet

git 12月日更

使用 javap 分析 Java 的字符串操作

汪子熙

Java jdk 28天写作 12月日更 javac

学python,怎么能不学习scrapy呢,这篇博客带你学会它

梦想橡皮擦

12月日更

字节码引用检测原理与实战

vivo互联网技术

编程语言 字节码编程 引用

鸿蒙智联设备开发,这五大法宝你应该拥有|HDC2021技术分论坛

HarmonyOS开发者

HarmonyOS

模块1作业

miliving

大厂算法面试之leetcode精讲24.其他类型题

全栈潇晨

算法 LeetCode

网络协议之:基于UDP的高速数据传输协议UDT

程序那些事

TCP 网络协议 udp 程序那些事 12月日更

全网最全-混合精度训练原理

科技热闻

对话中国人寿:DevOps实践经验分享

龙智—DevSecOps解决方案

DevOps 中国人寿

【HarmonyOS 专题】01 基础 Mac 环境安装配置

阿策小和尚

HarmonyOS 28天写作 Android 小菜鸟 12月日更

使用javap深入理解Java整型常量和整型变量的区别

汪子熙

Java jdk 28天写作 12月日更 javap

Java开发框架Struts相关知识分享

@零度

struts JAVA开发

高并发线下沙龙不容错过!

Qunar技术沙龙

高并发

喜报 | 旺链科技获批张江国家自主创新示范区专项发展资金!

旺链科技

区块链 数字经济 产业区块链

【量化】资产组合理论:鸡蛋不能放在一个篮子里

恒生LIGHT云社区

量化投资 量化

Prometheus Exporter (十九)Collectd Exporter

耳东@Erdong

Prometheus 28天写作 exporter 12月日更 Collectd

Linux云计算架构师:Linux全套实战学习资料

侠盗安全

Linux linux运维 运维工程师 云计算架构师 linux电子书

元气部落盲盒芒趣一番赏盲盒app开发搭建

风行无疆

react源码解析17.context

buchila11

React React Hooks

Android C++系列:Linux线程(四)线程同步

轻口味

android 28天写作 12月日更

微软发布gRPC-Web实现,可直接在浏览器端调用gRPC服务_大前端_Arthur Casals_InfoQ精选文章