11

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

 3 years ago
source link: https://www.infoq.cn/article/zQCGem6XImFGr195H6Iq
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

最近,微软 发布 了.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 被用来序列化和编码消息 (尽管也可以使用 其他编码器 )。

Z7RVV3v.png!web

图片来源: 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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK