写点什么

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

评论

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

Unity ML-agents 参数设置解明

行者AI

Lazada首届技术开放日开麦在即 共享技术创新最佳实践

EMQ X Cloud 正式支持 Microsoft Azure 平台,助力企业出海业务

EMQ映云科技

azure 云端 云上数据 emq

保洁阿姨分享:腾讯架构师JDK源码笔记,13万字,带你飙向实战

不收藏你就后悔吧!费了三天才从GitHub上扒下的阿里Java优化笔记

财务或类财务系统数值精度设计

路边水果摊

数字 财务 精度 数值

来自网络资源资产管理的灵魂拷问

鲸品堂

网络 资源 运营商

哔哩哔哩B站视频下载器推荐(简单又好用)

资源君

工具 分享 哔哩哔哩 b站视频下载 教程分享

电脑里的视频被误删了可以用EasyRecovery恢复吗?

淋雨

EasyRecovery 文件恢复 硬盘数据恢复

还在用Jenkins?试试Gitlab的CI/CD功能吧,贼带劲!

看完这篇文章,你也可以手写MyBatis部分源码(JDBC)

聊一聊在阿里做了 8 年研发后,我对打造大型工程研发团队的再思考

尔达Erda

开源 云原生 研发管理 PaaS 研发

文档内容结构化在百度文库的技术探索

百度Geek说

百度 大前端

最壕逆天改命:18名Java程序员凭阿里P8笔记,同时斩获一线大厂offer

Java架构师迁哥

Java虚拟机之CMS垃圾收集器

2021,你还在写“赤裸裸”的API吗?

东京奥运会与网络安全背后的速度博弈!

郑州埃文科技

架构训练营模块三作业

晨晨

架构训练营

基于 Golang 构建高可扩展的云原生 PaaS(附 PPT 下载)

尔达Erda

开源 云原生 数字化转型 PaaS 数字化

手把手教你实现Android编译期注解

vivo互联网技术

android 注解 sdk

Cypress 自动化测试

admin

自动化测试 Cypress 测试 单元测试 UI测试

小透明学弟的华为上岸之路

程序员鱼皮

Java c++ Python 大前端 后端

【云洲智造】直播间下午4:30准时开播!

工业互联网

以1敌10不是梦,Spring Boot企业级真实应用案例

博文视点Broadview

保安小王分享:四面字节跳动,终拿Offer,只有努力,方能成功

Abp太重了?轻量化Abp框架

Patronum

学习 程序员 架构 框架 Abp

银行4.0的AI世界——开启算法力的时代

索信达控股

科技监管能源运作?智慧能源从光热发电技术开始描述

一只数据鲸鱼

数据可视化 智慧能源 光热发电

如何基于磁盘 KV 实现 Bitmap

Kvrocks

redis BitMap storage KV存储引擎

秒懂 Java 的三种代理模式

模块三作业

NewBranSTONE

架构实战营

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