微軟發佈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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章