写点什么

微软发布 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:0116067

评论

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

Sora 文生视频技术大揭秘:能力惊艳但局限几何?

测吧(北京)科技有限公司

测试

提高IT工单管理的方法

ServiceDesk_Plus

工单管理 工单管理软件 IT工单管理

鸿蒙智行问界M9,中国豪华车的龙门一跃

脑极体

AI

鸿蒙原生开发手记:05-开发之外的那些事

少湖说

HarmonyOS 鸿蒙系统

压测实战 | 记录一次元旦跨年夜的测试保障

优测云服务平台

压力测试

更快、更灵活、场景更丰富,云效镜像构建能力升级啦!

阿里巴巴云原生

阿里云 云原生

更快、更灵活、场景更丰富,云效镜像构建能力升级啦!

阿里云云效

阿里云

聊一聊 C#线程池 的线程动态注入

不在线第一只蜗牛

Java C# 线程池

【YashanDB知识库】通过触发器复制varchar(4000 char)列的数据导致乱码

YashanDB

数据库 yashandb

【YashanDB知识库】由于druid中间件配置导致的YAS-04003 maximum number of open cursors is 1000

YashanDB

数据库 yashandb

20 条实用的创业实战指南:初创项目如何提升竞争力?

TechubNews

东风汽车在电机控制器电容温升仿真方法与应用

Altair RapidMiner

汽车 新能源汽车 仿真 #人工智能 altair

Karmada v1.12 版本发布!单集群应用迁移可维护性增强

华为云开发者联盟

Kubernetes 容器编排 Karmada #云原生 #开源

SD-WAN:跨国企业组网方案

Ogcloud

SD-WAN SD-WAN组网 SD-WAN国际专线 跨国网络专线 跨国企业组网

跨国专线网络如何开通?申请流程解析

Ogcloud

企业网络 跨国网络 国际网络专线 跨国网络专线 国际互联网专线

《鲲鹏原生开发技术白皮书》发布,携更多伙伴迈入原生开发新时代

Geek_2d6073

非凸科技荣登脉脉2024“年度职得去雇主”榜单

非凸科技

LeetCode题解:617. 合并二叉树,JavaScript,详细注释

Lee Chen

【YashanDB知识库】YAS-00004 feature "create user" has not been implemented yet

YashanDB

数据库 yashandb

【YashanDB知识库】YAS-00004 feature "implict table" has not been implemented yet

YashanDB

数据库 yashandb

【YashanDB知识库】使用leading hint调整SQL执行计划后报错YAS-04522 invalid hint leading

YashanDB

数据库 yashandb

【YashanDB知识库】exp 导出数据库时,报错YAS-00402

YashanDB

数据库 yashandb

Milvus×EasyAi:如何用java从零搭建人脸识别应用

Zilliz

Java 人脸识别 Milvus

鸿蒙原生开发手记:04-一个完整元服务案例

少湖说

鸿蒙系统 fluter harmoyos

想在 Java 八股文面试中脱颖而出?这1000 道互联网大厂 工程师面试题必不可少

Summer

Java 程序员 面试 架构师 大厂

啃完阿里老哥这套Java面试八股文后,成功收获蚂蚁 offer!

Summer

Java 程序员 面试 架构师 大厂

【YashanDB知识库】通过dblink查询Oracle数据时报YAS-07301异常

YashanDB

数据库 yashandb

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