微软发布 gRPC-Web 实现,可直接在浏览器端调用 gRPC 服务
原文鏈接:Microsoft Releases gRPC-Web for .NET
最近,微軟發布了 .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 的信息可以在這里找到。
總結
以上是生活随笔為你收集整理的微软发布 gRPC-Web 实现,可直接在浏览器端调用 gRPC 服务的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 5个月的孕妇可以喝咖啡之类的饮料吗?
- 下一篇: 沪指收涨5.7%冲破3300点 股市太火