最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#使用Thrift作為RPC框架入門詳細(xì)教程

 更新時(shí)間:2021年11月26日 08:53:38   作者:楊凱2020  
這篇文件我們講了從0到1使用thrift框架的方法,也講了一些該框架的基本知識,本文將詳細(xì)介紹 Thrift 在C#語言下的使用方式,并且提供豐富的實(shí)例代碼加以解釋說明,幫助使用者快速構(gòu)建服務(wù),感興趣的朋友一起看看吧

前言

本文將介紹由 Facebook 開發(fā)的遠(yuǎn)程服務(wù)調(diào)用框架 Apache Thrift,它采用接口描述語言定義并創(chuàng)建服務(wù),支持可擴(kuò)展的跨語言服務(wù)開發(fā),所包含的代碼生成引擎可以在多種語言中,如 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk 等創(chuàng)建高效的、無縫的服務(wù),其傳輸數(shù)據(jù)采用二進(jìn)制格式,相對 XML 和 JSON 體積更小,對于高并發(fā)、大數(shù)據(jù)量和多語言的環(huán)境更有優(yōu)勢。本文將詳細(xì)介紹 Thrift 在C#語言下的使用方式,并且提供豐富的實(shí)例代碼加以解釋說明,幫助使用者快速構(gòu)建服務(wù)。

完善開發(fā)工具

通過nuget在vs2019中安裝thrift

在項(xiàng)目中引用右鍵點(diǎn)擊管理Nuget程序包,在打開的界面輸入thrift,如下圖:

我們選擇ApacheThrift這一項(xiàng)進(jìn)行安裝,安裝后,在我們項(xiàng)目里有Thrift45.dll的引用,如下圖:

下載thrift代碼生成工具

thrift是支持異構(gòu)語言、異構(gòu)平臺的通信開發(fā)RPC框架,它通過中間語言IDL進(jìn)行描述你要定義的結(jié)構(gòu)、類、服務(wù)等,并通過代碼生成工具生成各個(gè)語言上對應(yīng)的代碼。

接下來,我們進(jìn)入Apache網(wǎng)站Thrift項(xiàng)目下載Thrift代碼生成工具,如下圖:

我們把下載的這個(gè)exe文件放到我們項(xiàng)目的根目錄下,以備后用,如下圖:

至此,關(guān)于thrift的開發(fā)工具,我們已經(jīng)準(zhǔn)備完畢,接下來來編寫thrift接口描述文件

thrift描述文件

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

  • 它提供了基礎(chǔ)類型的定義,包括bool、i16、i32、i64、double、string
  • enum
  • Struct 對一些基礎(chǔ)類型的封裝,對應(yīng)C#中Class字段
  • 還有一些集合的定義,包含 set<> 對應(yīng)C#中的HashSet,是一種唯一元素的集合(Thrift框架自己定義了THashSet類型與之相對應(yīng));list<>對應(yīng)C#中的List<>;map<K,V>對應(yīng)C#的Dictionary<K,V>
  • service 這個(gè)是thrift的重點(diǎn),它是一些方法集合,thrift會根據(jù)這個(gè)定義生成客戶端代碼和服務(wù)端代碼
  • exception 對應(yīng)C#中的Exception類型
  • thrift關(guān)于類型的定義以及示例代碼請打開這個(gè)網(wǎng)址:IDL描述

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

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

namespace csharp WpfApp1.ceshi

include 在描述文件的頭部定義。 用該命令包含其他thrift描述文件,當(dāng)編譯生成代碼時(shí)也會編譯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支持的類型定義一個(gè)別名。代碼如下:

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;
}

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

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

我們先要通過cd 將當(dāng)前路徑跳轉(zhuǎn)到thrift-0.12.0.exe所在的路徑

示例

我定義了了一個(gè)描述文件,如下:

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);
}

我們通過上述命令執(zhí)行后,生成的代碼結(jié)構(gòu)如下圖:

我們打開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類的命名空間,這和我們上文講的時(shí)一致的。
我們定義的service GuidGenService生成了如下代碼:

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

結(jié)尾

這篇文件我們講了從0到1使用thrift框架的方法,也講了一些該框架的基本知識,接下來的文件,我們將通過一個(gè)示例具體講解一下service指令代碼生成的代碼的具體含義和使用方法

到此這篇關(guān)于C#使用Thrift作為RPC框架入門(一)的文章就介紹到這了,更多相關(guān)c# Thrift RPC框架內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • unity實(shí)現(xiàn)虛擬搖桿控制Virtual Joystick

    unity實(shí)現(xiàn)虛擬搖桿控制Virtual Joystick

    這篇文章主要為大家詳細(xì)介紹了unity實(shí)現(xiàn)虛擬搖桿控制Virtual Joystick,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • c# webapi 配置swagger的方法

    c# webapi 配置swagger的方法

    這篇文章主要介紹了c# webapi 配置swagger的方法,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • WPF利用RichTextBox實(shí)現(xiàn)富文本編輯器

    WPF利用RichTextBox實(shí)現(xiàn)富文本編輯器

    在實(shí)際應(yīng)用中,富文本隨處可見,那么在WPF開發(fā)中,如何實(shí)現(xiàn)富文本編輯呢?本文以一個(gè)簡單的小例子,簡述如何通過RichTextBox實(shí)現(xiàn)富文本編輯功能,需要的可以參考下
    2024-02-02
  • C#畫筆Pen保存和恢復(fù)圖形對象的設(shè)置方法

    C#畫筆Pen保存和恢復(fù)圖形對象的設(shè)置方法

    這篇文章主要介紹了C#畫筆Pen保存和恢復(fù)圖形對象的設(shè)置方法,實(shí)例分析了畫筆的保存save及恢復(fù)屬性Restore的相關(guān)使用技巧,需要的朋友可以參考下
    2015-06-06
  • C#中矩陣運(yùn)算方法實(shí)例分析

    C#中矩陣運(yùn)算方法實(shí)例分析

    這篇文章主要介紹了C#中矩陣運(yùn)算方法,實(shí)例分析了通過C#實(shí)現(xiàn)矩陣的初始化、轉(zhuǎn)置矩陣、求逆矩陣等各種常用的操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-04-04
  • C#利用VS中插件打包并發(fā)布winfrom程序

    C#利用VS中插件打包并發(fā)布winfrom程序

    這篇文章主要為大家詳細(xì)介紹了C#利用VS中插件打包并發(fā)布winfrom程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • C#過濾DataTable中空數(shù)據(jù)和重復(fù)數(shù)據(jù)的示例代碼

    C#過濾DataTable中空數(shù)據(jù)和重復(fù)數(shù)據(jù)的示例代碼

    這篇文章主要給大家介紹了關(guān)于C#過濾DataTable中空數(shù)據(jù)和重復(fù)數(shù)據(jù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • C#中實(shí)現(xiàn)深度優(yōu)先搜索

    C#中實(shí)現(xiàn)深度優(yōu)先搜索

    深度優(yōu)先搜索(DFS)是一種遍歷或搜索圖或樹的算法,廣泛應(yīng)用于迷宮尋路、圖像處理、路徑規(guī)劃、模式識別、社交網(wǎng)絡(luò)分析等領(lǐng)域,學(xué)習(xí)DFS有助于理解圖結(jié)構(gòu),解決回溯問題,提升算法設(shè)計(jì)與分析能力,下面就來介紹一下
    2024-10-10
  • C#連接SQL?Sever數(shù)據(jù)庫詳細(xì)圖文教程

    C#連接SQL?Sever數(shù)據(jù)庫詳細(xì)圖文教程

    C#是Microsoft公司為.NET Framework推出的重量級語言,和它搭配最完美的數(shù)據(jù)庫無疑就是Microsoft SQL Server了,下面這篇文章主要給大家介紹了關(guān)于C#連接SQL?Sever數(shù)據(jù)庫的詳細(xì)圖文教程,需要的朋友可以參考下
    2023-06-06
  • C#?Timer控件學(xué)習(xí)之使用Timer解決按鈕冪等性問題

    C#?Timer控件學(xué)習(xí)之使用Timer解決按鈕冪等性問題

    Timer控件又稱定時(shí)器控件或計(jì)時(shí)器控件,該控件的主要作用是按一定的時(shí)間間隔周期性地觸發(fā)一個(gè)名為Tick的事件,因此在該事件的代碼中可以放置一些需要每隔一段時(shí)間重復(fù)執(zhí)行的程序段,這篇文章主要介紹了關(guān)于C#使用Timer解決按鈕冪等性問題的相關(guān)資料,需要的朋友可以參考下
    2022-10-10

最新評論

玉溪市| 册亨县| 徐州市| 清水县| 高淳县| 新乐市| 孟连| 晋城| 巩留县| 昌平区| 镇赉县| 大化| 绵竹市| 长治市| 建昌县| 南岸区| 贡嘎县| 齐河县| 睢宁县| 寿宁县| 阳城县| 基隆市| 泾源县| 双鸭山市| 大同市| 芷江| 萍乡市| 武强县| 雅江县| 江川县| 牙克石市| 松原市| 信阳市| 兴化市| 闻喜县| 太原市| 牙克石市| 昔阳县| 泰安市| 崇左市| 永宁县|