NET 7 正式推出標(biāo)準(zhǔn)期限支持,支持期限為 18 個(gè)月。 其中包括許多令人興奮的新功能,包括 Web API、gRPC、ASP.NET 和 C#11 的性能升級(jí)。
在古田等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站設(shè)計(jì)、網(wǎng)站制作 網(wǎng)站設(shè)計(jì)制作按需定制開發(fā),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),全網(wǎng)整合營銷推廣,成都外貿(mào)網(wǎng)站建設(shè)公司,古田網(wǎng)站建設(shè)費(fèi)用合理。
本文涵蓋以下主題:
.NET 7 中的性能改進(jìn)。
gRPC JSON 轉(zhuǎn)碼。
在 .NET 7 中創(chuàng)建 gRPC 服務(wù)。
在 Postman 使用 gRPC 服務(wù)。
使用服務(wù)器反射和 Postman
添加 Swagger 規(guī)范。
除了討論 .NET 7 中 gRPC 的新特性,我們還將實(shí)現(xiàn)一個(gè)能夠在一分鐘內(nèi)流式傳輸 500 萬條記錄的真實(shí)微服務(wù)。
這是一個(gè)快速回顧:
gRPC 是由 CNCF 開發(fā)的流行的開源 RPC 框架。
作為契約優(yōu)先、獨(dú)立于語言的框架,客戶端和服務(wù)器必須就消息的內(nèi)容和傳遞方式達(dá)成一致,契約在 .proto 文件中定義,然后使用 .NET7 的工具生成代碼。
在單個(gè) tcp 連接上,HTTP/2 支持多路復(fù)用,您可以同時(shí)發(fā)送多個(gè)請(qǐng)求。
此外,gRPC 支持?jǐn)?shù)據(jù)流,其中服務(wù)器可以同時(shí)向客戶端發(fā)送多個(gè)響應(yīng),反之亦然。
.NET 7 中有哪些新功能?
1、性能改進(jìn)
為了讓 gRPC 支持多路復(fù)用,HTTP/2 是必需的。 但是,Kestrel 的 HTTP/2 實(shí)現(xiàn)存在一個(gè)已知問題,該問題會(huì)在連接繁忙時(shí)通過 HTTP/2 寫入響應(yīng)時(shí)出現(xiàn)瓶頸。 當(dāng)您在同一個(gè) TCP 連接上同時(shí)運(yùn)行多個(gè)請(qǐng)求,但一次只有一個(gè)線程能夠?qū)懭朐撨B接時(shí),就會(huì)發(fā)生這種情況。 這是通過 .NET 6 中的線程鎖完成的,這會(huì)導(dǎo)致鎖爭用。
NET 7 使用一種巧妙的方法來解決此瓶頸,即實(shí)現(xiàn)一個(gè)隊(duì)列,該隊(duì)列會(huì)在寫入完成時(shí)通知所有其他線程,讓它們等待寫入完成。 因此,性能大大提升,CPU資源得到更好的利用——不再需要爭鎖。
.NET gRPC 團(tuán)隊(duì)的基準(zhǔn)測(cè)試表明服務(wù)器流式處理提高了 800%。
.NET 6–0.5M RPS
.NET 7–4.5M RPS
HTTP/2 上傳速度
通過增加緩沖區(qū)大小可將延遲減少 600%。 與 .NET 6 相比,.NET 7 將上傳 100MB 文件的時(shí)間從 26.9 秒減少到 4.3 秒。
.NET 7 gRPC 的性能現(xiàn)在超過了 Rust、Go 和 C++ 等流行框架。
對(duì)比于其他語言的程序,Go語言的跨平臺(tái)能力是真的強(qiáng),拿.Net和JAVA來說吧,.Net在.Net core出現(xiàn)之前是不能跨平臺(tái)的,只能在windows上編譯運(yùn)行,即使是.net core出現(xiàn)以后,跨平臺(tái)的程序也是相當(dāng)?shù)穆闊?。而java雖然一直都可以跨平臺(tái),但是運(yùn)行JAVA程序的機(jī)器上也必須要有JAVA程序運(yùn)行環(huán)境JRE。而相對(duì)于Go程序,跨平臺(tái)就簡單的多了,只需要在編譯指定目標(biāo)程序運(yùn)行的架構(gòu)和環(huán)境即可編譯出指定操作系統(tǒng)和架構(gòu)的程序。
以上是指定了go的環(huán)境變量后執(zhí)行的go build命令進(jìn)行目標(biāo)程序的構(gòu)建,這種方式會(huì)一直生效的,如果不讓他一直生效,可以在構(gòu)建的時(shí)候臨時(shí)指定環(huán)境變量,下面以window的環(huán)境為例,來介紹臨時(shí)指定環(huán)境變量的方式構(gòu)建可以在Linux環(huán)境下運(yùn)行的可執(zhí)行程序:
可以根據(jù)不同的架構(gòu)和操作系統(tǒng)將其編寫為不同的.bat的可執(zhí)行文件放置在程序的根目錄,Linux的和MAC的也一樣編寫成腳本文件放置在程序的根目錄,這樣在構(gòu)建的時(shí)候就不用再敲命令了,直接運(yùn)行腳本就可以了。
Java程序編譯打包后為war包或者是java包,必須執(zhí)行java -jar 命令或者將其放置到tomcat的指定目錄下,運(yùn)行tomcat程序。而Go語言編寫的程序最終為可執(zhí)行的文件(window下編譯出的是.exe的可執(zhí)行文件),只需要將其賦予可執(zhí)行的權(quán)限就可以直接運(yùn)行了。
構(gòu)建JAVA程序的鏡像需要指定java的基礎(chǔ)鏡像,否則就需要在鏡像中安裝java的運(yùn)行環(huán)境了,下面展示的是構(gòu)建的一個(gè)JAVA程序的鏡像,構(gòu)建出來鏡像的體積相對(duì)比較大
而Go程序制作出的鏡像就不需要安裝任何的依賴環(huán)境,因?yàn)樗诖虬臅r(shí)候就已經(jīng)將依賴的包一塊打包到一起了
拿著這個(gè)鏡像就可以到處運(yùn)行了。
通過對(duì)比我們可以發(fā)現(xiàn),如果沒有之前的技術(shù)和業(yè)務(wù)的積累,重新開發(fā)一個(gè)新的項(xiàng)目,使用go去開發(fā)無疑是最容易上手的,所以現(xiàn)在很多公司都使用go進(jìn)行開發(fā),也逐漸將其他語言的項(xiàng)目逐步的用go語言進(jìn)行改造。其實(shí)用什么語言不重要,合適的才重要,開發(fā)項(xiàng)目在選擇語言的時(shí)候也會(huì)綜合多方面來考慮選擇合適的語言和架構(gòu),畢竟很多公司都不是搞研究的,都需要項(xiàng)目來賺錢,所以開發(fā)的速度、客戶的滿意度、項(xiàng)目交付的時(shí)間才是驅(qū)動(dòng)公司技術(shù)的主要因素。
我們個(gè)人也應(yīng)該不斷完善自己的技術(shù)棧,不應(yīng)該太依靠某種語言,最重要的還是自己的架構(gòu)思想和底層架構(gòu)知識(shí),只有掌握了這些才能夠不被 社會(huì) 和公司“優(yōu)化”。
WAP速度慢,一般是代理上網(wǎng)
NET速度快,直連
CMWAP類:支持百寶箱、MO手機(jī)上網(wǎng)、彩信業(yè)務(wù)等;
CMNET類:支持登錄互聯(lián)網(wǎng);
還可以這么說: WAP就是上WAP開頭的網(wǎng)址。 NET就是上WWW開頭的網(wǎng)址。