中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C#怎么使用Thrift作為RPC框架

發布時間:2021-11-26 10:35:56 來源:億速云 閱讀:272 作者:iii 欄目:開發技術

這篇文章主要講解了“C#怎么使用Thrift作為RPC框架”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“C#怎么使用Thrift作為RPC框架”吧!

完善開發工具

通過nuget在vs2019中安裝thrift

在項目中引用右鍵點擊管理Nuget程序包,在打開的界面輸入thrift,如下圖:

C#怎么使用Thrift作為RPC框架

我們選擇ApacheThrift這一項進行安裝,安裝后,在我們項目里有Thrift45.dll的引用,如下圖:

C#怎么使用Thrift作為RPC框架

下載thrift代碼生成工具

thrift是支持異構語言、異構平臺的通信開發RPC框架,它通過中間語言IDL進行描述你要定義的結構、類、服務等,并通過代碼生成工具生成各個語言上對應的代碼。

接下來,我們進入Apache網站Thrift項目下載Thrift代碼生成工具,如下圖:

C#怎么使用Thrift作為RPC框架

我們把下載的這個exe文件放到我們項目的根目錄下,以備后用,如下圖:

C#怎么使用Thrift作為RPC框架

至此,關于thrift的開發工具,我們已經準備完畢,接下來來編寫thrift接口描述文件

thrift描述文件

thrift提供的接口描述文件是以thrift結尾的格式文件,我們來解釋一下這種IDL的語法,

  • 它提供了基礎類型的定義,包括bool、i16、i32、i64、double、string

  • enum

  • Struct 對一些基礎類型的封裝,對應C#中Class字段

  • 還有一些集合的定義,包含 set<> 對應C#中的HashSet,是一種唯一元素的集合(Thrift框架自己定義了THashSet類型與之相對應);list<>對應C#中的List<>;map<K,V>對應C#的Dictionary<K,V>

  • service 這個是thrift的重點,它是一些方法集合,thrift會根據這個定義生成客戶端代碼和服務端代碼

  • exception 對應C#中的Exception類型

  • thrift關于類型的定義以及示例代碼請打開這個網址:IDL描述

在IDL描述文件中,Thrift除了對類型的定義外,我們還需要記住一下知識點:

  • namespace 在描述文件的頭部定義。 以當前文件為根目錄,生成多級目錄;在生成的代碼上添加namespace命名空間。代碼如下:

namespace csharp WpfApp1.ceshi

include 在描述文件的頭部定義。 用該命令包含其他thrift描述文件,當編譯生成代碼時也會編譯include指定的thrift文件。代碼如下:

include "pe1.thrift"

使用方法,pe1.thrift文件定義如下:

struct pe1
{
 1: i32 id;
}

在其他文件中,引入上述文件,定義如下:

include "pe1.thrift"

service GuidGenService
{
   string getGuid(1:pe1.pe1 pe1);
}

typedef 類型定義命令,將thrift支持的類型定義一個別名。代碼如下:

typedef i32 int
struct People
{
1: int ID;
2: string Name;
3: i16 Age;
4: list<i32> onelist;
5: set<string> oneSet;
6: map<i32,string> oneset;
}

當定義完描述文件后,我們通過如下cmd命令生成代碼文件:

thrift-0.12.0.exe -r -gen csharp People.thrift

我們先要通過cd 將當前路徑跳轉到thrift-0.12.0.exe所在的路徑

示例

我定義了了一個描述文件,如下:

namespace csharp WpfApp1.ceshi
include "pe1.thrift"

typedef i32 int

struct People
{
1: int ID;
2: string Name;
3: i16 Age;
4: list<i32> onelist;
5: set<string> oneSet;
6: map<i32,string> oneset;
}

service HelloService
{
 void SetPeople(1: People people1);
}

service GuidGenService
{
  string getGuid(1:pe1.pe1 pe1);
}

我們通過上述命令執行后,生成的代碼結構如下圖:

C#怎么使用Thrift作為RPC框架

我們打開people.cs可以看到struct people生成了如下代碼:

namespace WpfApp1.ceshi
{
  #if !SILVERLIGHT
  [Serializable]
  #endif
  public partial class People : TBase
  {
    private int _ID;
    private string _Name;
    private short _Age;
    private List<int> _onelist;
    private THashSet<string> _oneSet;
    private Dictionary<int, string> _oneset;
    .....

這里需要注意一下people類的命名空間,這和我們上文講的時一致的。
我們定義的service GuidGenService生成了如下代碼:

C#怎么使用Thrift作為RPC框架

該類是我們使用該框架的重點,它給我們生成了客戶端和服務器端代碼,從圖中我們可以看該文件下生成了兩個接口ISync和Iface,前者是同步方法,后者生成的是異步調用方法,接下來是一個供我們客戶端調用的類,它繼承了iface接口,而iface又繼承了ISync接口;再往下看是一個Processor,是服務端使用的類。

感謝各位的閱讀,以上就是“C#怎么使用Thrift作為RPC框架”的內容了,經過本文的學習后,相信大家對C#怎么使用Thrift作為RPC框架這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

仲巴县| 峨眉山市| 依兰县| 广西| 广州市| 富阳市| 丹棱县| 揭阳市| 大石桥市| 广安市| 西乌珠穆沁旗| 永安市| 佛山市| 金川县| 庄浪县| 留坝县| 黄龙县| 台中市| 宁河县| 安溪县| 永泰县| 康保县| 蓬安县| 沅陵县| 博罗县| 阳谷县| 呼伦贝尔市| 阳原县| 铜梁县| 交城县| 赫章县| 章丘市| 迭部县| 凤凰县| 武山县| 红原县| 望都县| 郴州市| 武宣县| 苗栗市| 淮南市|