2月5-7日QCon全球软件开发大会携手100+位大咖讲师落定北京,点击查看完整日程>> 了解详情
写点什么

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

评论

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

浅析「扣减库存」的方案设计

悟空聊架构

分布式 秒杀 电商 6月日更 库存

【Flutter 专题】112 图解自定义 ACEPieWidget 饼状图 (一)

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 6月日更

XCH奇亚系统开发流程丨XCH奇亚源码案例开发

系统开发咨询1357O98O718

微服务简介

wildpig

容器 微服务 Spring Cloud

机器通用运行框架抽象

型火🔥

架构 微服务 抽象 中间件 机器

无损放大美好回忆  让容颜无惧时光!

淋雨

PhotoZoom 无损放大 图片无损放大

Chia奇亚挖矿系统开发技术方案丨Chia奇亚挖矿源码模式

系统开发咨询1357O98O718

【译】JavaScript 代码整洁之道-注释篇

KooFE

JavaScript 大前端 代码注释 6月日更 整洁代码

“微博评论”高性能高可用计算架构

白发青年

架构实战营

react源码解析6.legacy和concurrent模式入口函数

全栈潇晨

react源码

k8s部署手册

Xiao8

k8s 6月日更

Java并发编程——AQS源码解析

Antway

6月日更

树莓派体验Docker

IT蜗壳-Tango

6月日更

python——格式化输入输出与截取字符串

在即

6月日更

Chia奇亚(XCH)系统开发案例解析丨Chia奇亚(XCH)现成源码

系统开发咨询1357O98O718

权限与认证:JWT实践

程序员架构进阶

源码分析 JWT 认证授权 28天写作 6月日更

架构实战营模块5作业

Vic

架构实战营

☕【JVM技术之旅】字节码指令重排序

洛神灬殇

JVM 指令重排序 6月日更

【LeetCode】反转每对括号间的子串Java题解

Albert

算法 LeetCode 6月日更

华为VS谷歌:万物互联,谁主沉浮?

老猿Python

华为 Google HarmonyOS 谷歌 Fuchsia

你有没有 996 ?你要不要 955 ?

escray

学习 极客时间 朱赟的技术管理课 6月日更

没想到你是这样的EasyRecovery

淋雨

数据恢复 EasyRecovery 文件恢复

这个暑假,狂暴输出炫酷的游戏视频,就靠Camtasia 2021啦!

淋雨

Camtasia 录屏 专业录屏

一致性Hash算法与虚拟节点

Kareza

6月日更

贪心算法之 活动安排(Java代码实现)

若尘

算法 贪心算法 6月日更

奇亚Chia算力挖矿系统开发(案例源码)

系统开发咨询1357O98O718

NCRE考试感想 三级信息安全(下)

万里无云万里天

信息安全 6月日更 NCRE 考试经验

【Vue2.x 源码学习】第四篇 - 对象的深层劫持

Brave

源码 vue2 6月日更

职场人弯道超车的秘籍,利用Camtasia可以轻松实现!

淋雨

Camtasia 专业录屏

进大厂必备的项目经验!基于Spring Cloud再造滴滴打车项目实战

Java架构追梦

Java 架构 微服务 SpringCloud 网约车项目

Kubernetes手记(1)- Kubernetes概述

雪雷

k8s 6月日更

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