日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

gRPC in ASP.NET Core 3.x - gRPC 简介(2)

發布時間:2023/12/4 asp.net 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 gRPC in ASP.NET Core 3.x - gRPC 简介(2) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前一篇:

gRPC in ASP.NET Core 3.x - gRPC 簡介(1)

身份認證

這里指的不是用戶的身份認證,而是指多個server和client之間,它們如何識別出來誰是誰,并且能安全的進行消息傳輸。

在身份認證這方面,gRPC一共有4種身份認證的 機制:

  • 不采取任何措施的連接,也就是不安全的連接。

  • TLS/SSL 連接。

  • 基于 Google Token 的身份認證。

  • 自定義的身份認證提供商。?

?

針對第一種不安全的連接,client和server默認將會采用HTTP/1,沒有其他特殊的安全措施,也就是使用明文在網絡上傳輸。所以盡量別用不安全連接,容易被截獲。但是不安全連接卻不需要其他任何特殊的處理,不需要CA證書等等,所以適合于快速建立gRPC的情況,后期再添加其他安全措施也行。

?

如果采用了TLS/SSL,那么想截獲傳輸的消息就比較困難了,而且默認也是使用HTTP/2。HTTP/2的很多實現根本就不支持不安全連接,所以gRPC也不會嘗試使用這些不安全連接,但是如果gRPC發現它是在一個安全的連接上面,它就會嘗試把這些連接升級到HTTP/2,這時你的消息的傳輸速度就會變得更快,因為HTTP/2協議的效率更高。

但是需要注意的是,client會對這些證書進行驗證,所以不能因為這是一個安全連接,那么就啥也不用干。client會去檢查證書的授權來確保證書的真實性。所以如果你使用的是生成的證書,那么你還需要在client端做一些額外的工作來確保client能夠識別出這些server證書的合理性。

?

當使用基于 Google Token 的身份認證方式時,需要注意的是它需要安全的連接,所以你可以把這種認證方式想象為在SSL/TLS上面的一層。所以你需要有安全連接,在此之上,你才能使用基于Google Token的認證方式。?

?

最后一個是自定義身份認證,你可能想要的是OAuth 2.0這種認證協議,但是gRPC并沒有自帶OAuth 2.0協議,但是還是有很多用于不同語言的插件可以支持OAuth 2.0的。所以如果有需要的話,可以去官網查一下。

你也可以自己實現一個身份認證協議,但是自己實現的肯定是和語言有關的,而且gRPC也會盡量配合這種語言。所以不是讓你的認證協議像gRPC這樣工作,而是讓你盡量用該語言慣用的方式。所以使用C#開發一個身份認證提供商和使用Go語言可能會不太一樣。這塊的詳細信息需要去官網查閱。

?

消息傳輸類型

gRPC的消息傳輸類型有4種。

  • 第一種是一元的消息,就是簡單的請求--響應。

  • 第二種是server streaming(流),server會把數據streaming回給client。

  • 第三種是client streaming,也就是client會把數據streaming給server。

  • 最后是雙向streaming。

?

?一元消息

這里有一個server,一個client。gRPC從client發送請求到server開始,然后server做一些處理,生成一個響應并返回。所以在這次遠程調用里,有一個請求,一個響應。

這個Protocol Buffer的消息格式大約是這樣:

rpc 方法名(請求類型) returns(響應類型)?

在這里,即使請求的時候不需要帶有數據(參數),你仍然需要傳遞一個空的請求類型的對象。所以在gRPC里就必須有請求類型和響應類型,因為gRPC不知道你帶沒帶數據,而且未來你有可能需要帶上 數據。

?

Server Streaming

Server Streaming的請求和響應管道還是一樣的,但不同的是,雖然一切也是始于client到server的一個請求,然后server處理完之后或者當server正在生成響應的時候,server會一次發送一部分結果回來,也就是把響應sreaming回來。

一個常見的用例就是流式視頻。你發送一個請求,想要看某種類型的動作片,然后server會把視頻數據的一部分緩沖流發送回來,這樣client就不需要等到整個視頻一次性返回再看,一次返回一塊即可。

當使用這種遠程調用的時候,我們只需要在響應類型前面加一個關鍵字stream即可:

rpc 方法名(請求類型) returns(stream?響應類型)?

這樣的話,server就相當于會返回一個數組的響應,但是一次只返回一個。

?

Client Streaming

與Server streaming對應的就是Client streaming。

常見的用例就是上傳文件,你可能需要緩沖,這樣的話就會把請求分為多塊來執行,一次包含一部分數據。需要注意的時候,在發送期間,server會一直等待,直到整個請求都被接收到。在接收到整個請求之前,server不會做任何處理動作。最后當server接收到所有數據并處理完之后,server會發送一個響應返回給client。

不難猜,client streaming的格式是這樣的:

rpc 方法名(stream?請求類型) returns(響應類型)?

這個遠程調用就相當于,一個請求數據的數組,一次發送一個元素,最后所有請求處理完成后返回單個響應。

?

雙向Streaming

最后一種就是雙向streaming。在這種方式下,client會發送一個初始的請求,也許接下來還會發送幾個請求,與此同時server就開始把響應發送回來了,這時client可以繼續發送額外的請求。所以整個過程非常的異步,而且沒有什么預定義的結構來規定請求和響應如何構造。所以你也可以想到,在你的server和client之間,肯定是需要異步處理的。

雙向streaming的格式如下:

rpc 方法名(stream?請求類型) returns((stream?響應類型)?

這也就意味著一個數組的數據將會被發送,一個數組的數據也將會被響應,但都是一次只發送一個數據。

總結

以上是生活随笔為你收集整理的gRPC in ASP.NET Core 3.x - gRPC 简介(2)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。