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

2020 年 7 月 06 日

微软发布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 年 7 月 06 日 14:012292

评论

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

第三周用组合设计模式编写程序

Geek_fabd84

架构师训练营第 1 期 -- 第三周学习总结

发酵的死神

架构师训练营第 1 期

第三周作业

icydolphin

「架构师训练营第 1 期」

最完整的PyTorch数据科学家指南(1)

计算机与AI

深度学习 PyTorch

spring-boot-route(一)Controller接收参数的几种方式

Java旅途

Java Spring Boot

架構師訓練營第 1 期 - 第 02 周總結

Panda

架構師訓練營第 1 期

设计模式第三周总结「架构师训练营第 1 期」

天天向善

Ui Automator 框架和Ui Automator Viewer你会用吗?附送「必备adb命令」拿走不谢 !

清菡

android

架构师训练营—第三周作业

Geek_shu1988

架构师训练营 1 期第 3 周:代码重构 - 总结

piercebn

架构师训练营第 1 期

架构师训练营第三周学习总结

成长者

架构师训练营第 1 期

第三周总结

_

架构师训练营第一期 第三周总结

【读书笔记二】《企业IT架构转型之道-阿里巴巴中台战略思想与架构实战》

Man

中台 分布式 研发管理

Week 3 Assignment

Yinan

集中日志系统ELK

青乡之b

ELK

架构师训练营第 1 期 - 第三周学习总结

Anyou Liu

架构师训练营第 1 期

架构师训练营第三周命题作业

成长者

架构师训练营第 1 期

LeetCode题解:242. 有效的字母异位词,数组计数,JavaScript,详细注释

Lee Chen

LeetCode 前端进阶训练营

架构师训练营第 1 期 week2

张建亮

「架构师训练营第 1 期」

为啥你用@JsonFormat注解时,LocalDateTime会反序列化失败?

冰河

springboot LocalDateTime JsonFormat

为什么go中的receiver name不推荐使用this或者self

新世界杂货铺

go 后端

架构师训练营—第三周学习总结

Geek_shu1988

架构师训练营第 1 期 -- 第三周作业

发酵的死神

架构师训练营第 1 期

互联网上正规平台的辨别方法?被AG黑网投黑钱拿回的技巧方案

InfoQ_6b6a6317a692

架构师训练营第一期 - 第三周课后 - 作业二

架构师训练营第一期

设计模式第三周作业「架构师训练营第 1 期」

天天向善

单例模式 组合模式

spring-boot-route(二)读取配置文件的几种方式

Java旅途

Java Spring Boot

极客时间 - 架构师一期 - 第三周作业

_

第三周 架构师训练营第一期

架構師訓練營第 1 期 - 第 02 周作業

Panda

架構師訓練營第 1 期

架构师训练营第 1 期 week2 总结

张建亮

「架构师训练营第 1 期」

Linux忘记root密码怎么办

MySQL从删库到跑路

Linux 服务器 root密码 root

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