Grpc MagicOnion庫 之 客戶端和服務端 (案例版)

之前通過自己寫動態代理和用現成的動態代理庫等實現過RPC功能,今天,就寫一下如何直接引用GRPC的庫來實現業務邏輯。

gRPC的介紹,之前我也說了這個g的含義太多,也包含谷歌的意思了。

可以看這個gRPC的文檔介紹 : https://grpc.io/docs/what-is-grpc/

MagicOnion這個庫用它是因為它內部使用了 MessagePack-CSharp 序列化方式,這種方式效果要比谷歌的protobuf 效果還要好,更重要的是在Net這個平臺下來看的。

MagicOnion 是用于 .NET 平臺的現代 RPC 框架,它提供雙向實時通信(例如SignalR和Socket.io)以及 RPC 機制(例如 WCF 和基于 Web 的 API)。
該框架基于gRPC,它是一種用于 HTTP/2 的快速且緊湊的二進制網絡傳輸。但是,與普通 gRPC 不同,它將 C# 接口視為協議模式,從而無需.proto(Protocol Buffers IDL)即可在 C# 項目之間實現無縫代碼共享。

c99aa19e842fa4b9c8fac42337011d3f.png

接口是模式并提供 API 服務,就像普通的 C# 代碼一樣

f8293e9abe618a964d1391fd3873ca0e.png

其中 MagicOnion開源地址:https://github.com/Cysharp/MagicOnion

實現gRPC業務

我這邊結構如下:

01a7971e2229267b9ecf82bfeca34ae6.png

客戶端,服務端,以及共享接口,三部分組成。

主要引用的Nuget包為:

MagicOnion
MagicOnion.Server
MagicOnion.Client

接口定義

接口定義,是我直接拿之前做的demo的樣子直接搞的。也方便。

IDemo.cs

public?interface?IDemo?:?IService<IDemo>
{UnaryResult<string>?Say1(string?msg);UnaryResult<int>?Say2(string?a,?int?b,?List<string>?c,?Kind?kind);UnaryResult<Kind>?Say3(int?b,?List<string>?c,?Kind?kind);???
}
public?enum?Kind
{a,b
}

用了這個服務才發現,它不能像我之前自己實現的那樣,還能實現Viod返回類型和重載函數名等操作。

所以,它只能用于服務類的通訊,不能像函數那樣用,另外 UnaryResult?返回類型是必須的,這是需要注意的。

服務端

我這邊是直接新建了一個asp.net core web api,注釋新增的部分,就是我新增的代碼。

public?static?void?Main(string[]?args)
{var?builder?=?WebApplication.CreateBuilder(args);//?Add?services?to?the?container.builder.Services.AddControllers();//?Learn?more?about?configuring?Swagger/OpenAPI?at?https://aka.ms/aspnetcore/swashbucklebuilder.Services.AddEndpointsApiExplorer();builder.Services.AddSwaggerGen();//新增//增加Grpcbuilder.Services.AddGrpc();builder.Services.AddMagicOnion();var?app?=?builder.Build();//新增app.UseRouting();//?Configure?the?HTTP?request?pipeline.if?(app.Environment.IsDevelopment()){app.UseSwagger();app.UseSwaggerUI();}app.UseAuthorization();app.MapControllers();//新增app.UseEndpoints(endpoints?=>{endpoints.MapMagicOnionService();endpoints.MapGet("/",?async?context?=>{context.Response.ContentType?=?"text/plain;?charset=utf-8";?await?context.Response.WriteAsync("Grpc服務端已經創立,等待Grpc客戶端連接!");});});app.Run();
}

Demo接口服務端實現

public?class?Demo?:?ServiceBase<IDemo>,?IDemo
{public?async?UnaryResult<string>?Say1(string?msg){return?msg;}public?async?UnaryResult<int>?Say2(string?a,?int?b,?List<string>?c,?Kind?kind){return?b;}public?async?UnaryResult<Kind>?Say3(int?b,?List<string>?c,?Kind?kind){return?kind;}
}

實現接口的同時也要繼承eBase類,要不然,總有一些接口的方法未實現。

客戶端

客戶端就簡單許多了

static?async?Task?Main(string[]?args)
{Console.Title?=?"GrpcDemo?by?藍創精英團隊";var?channel?=?GrpcChannel.ForAddress("https://localhost:5001");var?demo?=?MagicOnionClient.Create<IDemo>(channel);Console.WriteLine(await?demo.Say1("123"));Console.WriteLine(await?demo.Say2("demo",?6,?new?List<string>()?{?"6"?},?Kind.b));Console.WriteLine(await?demo.Say3(1,?new?List<string>(),?Kind.a));Console.WriteLine("不錯,完成了任務!");Console.ReadLine();
}

效果

先運行服務端:

游覽器打開地址 : https://localhost:5001/

就可以看到下面的內容,說明服務成功啟動!

2b3f134bb1c0b948f1bdfbae59d7bb6d.png

然后,再運行客戶端

結果如下:

8ee111ca69b70bb903de76228bba9e9f.png

用別人的庫,確實方便許多。

總結

至此,RPC系列已經完結了,撒花,歐耶!

看著簡單,搞著不知不覺已經夜深人靜了,山中無歲月,世上已千年啊。

代碼地址

https://github.com/kesshei/GrpcDemo.git

https://gitee.com/kesshei/GrpcDemo.git

一鍵三連呦!,感謝大佬的支持,您的支持就是我的動力!

f135441527e76f86861844463ca4d3bf.jpeg

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/284578.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/284578.shtml
英文地址,請注明出處:http://en.pswp.cn/news/284578.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Windows11右下角出現評估副本水印如何去除?

Universal Watermark Disabler是一款十分好用的桌面工具&#xff0c;這款工具可以幫助用戶輕松的去除Windows11 版本的操作系統右下角的水印。 使用方法 1、打開Universal Watermark Disabler軟件&#xff0c;顯示出當前系統的版本與水印狀態。 2、Status中顯示Ready for insta…

redhat配置centos的yum源

redhat默認不支持第三方的yum源&#xff0c;要求有rhn賬號&#xff0c;下面就rhel5和rhel6改為centos源一、rhel5.5 X86_64更改為centos的yum源查看系統自帶的yum相關的rpm包rpm -qa|grep yum刪掉系統自帶的yum相關的包rpm -e --nodeps yum-updatesd-0 rpm -e --nodeps yum-sec…

【GlobalMapper精品教程】001:GlobalMapper23+24 Pro-x64中文安裝教程(附軟件包下載)

Global Mapper 23是一款非常專業的地圖繪制軟件&#xff0c;功能非常的豐富&#xff0c;內置距離和面積計算&#xff0c;包括光柵混合、對比度調節、海拔高度查詢、視線計算以及一些高級功能&#xff0c;可輕松實現圖像校正、通過地表數據進行輪廓生成、通過地表數據觀察分水嶺…

JIL 編譯與 AOT 編譯

JIT&#xff1a;Just-in-time compilation&#xff0c;即時編譯&#xff1b;AOT&#xff1a;Ahead-of-time compilation&#xff0c;事前編譯。 JVM即時編譯&#xff08;JIT&#xff09; 1. 動態編譯與靜態編譯 動態編譯&#xff08;dynamic compilation&#xff09;指的是“在…

中臺基礎指標列表

便于大家進行更方便的指標圈定&#xff0c;這里我將前面提到的通用指標進行一次拓展&#xff0c;為大家整理了一份完整的數據中臺基礎指標列表&#xff0c;方便大家在搭建指標體系時進行速查。 &#xff08;1&#xff09;App類產品分析指標 &#xff08;2&#xff09;網站類產…

期末作品檢查

1、學期個人總結 在這個學期在杜老師的帶領下學習了Python語言&#xff0c;這是一門相對于Java語言來說是比較簡單的語言&#xff0c;用處也十分的廣大。python是一種面向對象的解釋型計算機程序設計語言&#xff0c;語法簡潔清晰&#xff0c;目前已超越java成為最熱門的編程語…

C# 通過不安全代碼看內存加載

&#xff08;注&#xff1a;本篇用點長&#xff0c;有點繞&#xff0c;耐心瀏覽&#xff09;C#中類型分為值類型和引用類型&#xff0c;值類型存儲在堆棧中&#xff0c;是棧結構&#xff0c;先進后出&#xff0c;引用類型存儲在托管堆中。接下來用不安全代碼的地址&#xff0c;…

ArcGIS實驗教程——實驗四十五:坐標直接轉點、線、面案例教程(Create Features From Text File)

外業實測坐標(X、Y、Z)在ArcGIS中可以方便的生成點、點自動連成線、線轉面。本實驗講解ArcGIS中從數據文件創建要素工具(Create Features From Text File)生成點、線、面。 文章目錄 一、工具快速入門1. 工具添加2. 工具用法二、工具使用方法1. 創建點(Point)2. 創建多點…

湖北省軟件行業協會會員單位全名錄(2014年的信息)

理事長單位 1.烽火通信科技股份有限公司 副理事長單位&#xff08;排名不分先后&#xff09; 2.武漢大學計算機學院 3.武漢天喻信息產業股份有限公司 4.武漢開目信息技術有限責任公司 5.武漢鋼鐵工程技術集團自動化有限責任公司 6.武漢菲旺軟件技術有限責任公司 7.立得空間信息…

靜態html引入js添加隨機數后綴防止緩存

在web項目開發中&#xff0c;頁面引入js被修改時&#xff0c;為避免瀏覽器緩存引起的問題&#xff0c;在引入js時&#xff0c;給js名后面加上隨機數&#xff0c;以保證每次都發送新的請求。 在jsp中&#xff0c;一般通過后臺取隨機數即可&#xff0c;代碼如下: <script src&…

[轉]SDK與API區別

轉載&#xff1a;https://www.zhihu.com/question/21691705/answer/149935191 SDK&#xff08;software development kit&#xff09;&#xff0c;中文可譯為“軟件開發工具包”。 一般都是一些被軟件工程師用于為特定的軟件包、軟件架構、硬件平臺、操作系統等建立應用軟件的開…

詳談如何定制自己的博客園皮膚【轉】

轉自&#xff1a;http://www.cnblogs.com/jingmoxukong/p/7826982.html 目錄 前言Quickstart定制博客園 CSS 的原理頁面定制CSS代碼博客側邊欄公告頁首Html代碼頁腳Html代碼定制細節獨立控件小老鼠游戲動畫動畫時鐘百度分享欄Github 角標簽云背景動畫動態標題文章內容樣式定制帶…

【ArcGIS微課1000例】0025:ArcGIS Online當前未連接到在線資源終極解決辦法

ArcGIS Online在線資源列表: World Imagery: 底圖服務: 中國地圖彩色版: 打開ArcGIS時,系統托盤提示“ArcGIS Online當前未連接到在線資源”,如下圖所示,如果無法連接到ArcGIS Online,則就無法添加在線資源,如World Imagery等。 關于該問題,網上有多種解決辦法,然而…

學習.NET ,提升.NET技能,這些公眾號得關注

時逢七月&#xff0c;白云在天&#xff0c;綠水環山&#xff0c;甚是悠閑。可是&#xff0c;學路上的我們卻四處彷徨。學海無涯&#xff0c;我仍苦尋渡口&#xff1b;學路漫漫&#xff0c;我卻愁無舟楫。我不禁四下掃視&#xff0c;自語問天&#xff0c;學須有成&#xff0c;可…

Excel表格從指定部分重新分頁打印的兩種方法

Excel表格現在已經成為了一個極其重要的辦公工具&#xff0c;尤其是在數據處理方面&#xff0c;它可以進行各種數據的處理、統計分析和輔助決策操作&#xff0c;但是在日常工作中我們經常對一些功能無從下手&#xff0c;例如在進行表格內容打印時&#xff0c;需要將其中內容從某…

華為筆記本Win11更新時由于驅動問題引起藍牙鼠標經常斷開問題解決方法

每次Win11升級后如果發現藍牙鼠標經常斷開&#xff0c;打開“華為電腦管家”執行以下操作即可&#xff1a; 然后更新藍牙驅動 重啟電腦OK。

【ArcGIS微課1000例】0026:ArcGIS10如何自定義工具條?

ArcGIS中,可以創建用戶工具條,將自己常用的工具命令放到一起,方便實用提高工作效率。本文講解如何自定義工具條并添加與刪除工具。 1. 創建工具條 點擊【自定義】菜單→【自定義模式】,如下圖所示: 或者在任一工具條上點擊最后面的下拉三角形→自定義: 以上兩種方法都可…

基于 KubeSphere 流水線的 GitOps 最佳實踐

背景Kubesphere 3.3.0 集成了 ArgoCD&#xff0c;但與筆者目前使用的 K8S 版本不兼容。再者&#xff0c;目前 Kubesphere 中持續集成和流水線打通還是不太友好&#xff0c;也缺少文檔說明&#xff08;可能是筆者沒有找到&#xff09;。目前遇到最主要的問題就是流水線制作完成的…

【ArcGIS微課1000例】0027:ArcGIS屬性表(dbf)轉Excel的4中方法

ArcGIS中的矢量數據Shapefile屬性表存放在后綴名為.dbf的文件中,它是GIS數據分析的核心,如果將屬性表轉為別的平臺使用,一般需要將其轉為Excel格式。本文以ArcGIS自帶矢量數據continent為例,講解dbf轉excel的常見4種方法。 文章目錄 1. 表轉Excel工具2. 直接打開3. 導出屬性…

微信公眾號自定義菜單直接跳轉到小程序指定頁面

首頁我們要先拿到需要的小程序的頁面地址&#xff1a;&#xff08;如何拿到小程序頁面地址自行百度&#xff09; 然后登錄公眾號后臺&#xff0c;添加自定義菜單&#xff1a; 菜單的路徑選擇“跳轉小程序” &#xff0c;從綁定的小程序中選擇要跳轉的小程序&#xff0c;默認小程…