server如何調用 thrift_Thrift總結(二)如何快速創建自己的RPC服務

前面介紹了thrift 基礎的東西,怎么寫thrift 語法規范編寫腳本,如何生成相關的語言的接口。不清楚的可以看這個《Thrift總結(一)介紹》。做好之前的準備工作以后,下面就開始如何用Thrift寫RPC接口。

  如何用Thrift寫RPC接口

  1. 打開之前下載的thrift 源碼,thrift-0.10.0libcsharpsrc ,編譯生成Thrift.dll 文件。

a15a9c12100417d1a608aba88df3fb83.png

  2. 新建一個空白解決方案命名為HelloThrift。在解決方案根目錄下創建一個lib文件夾,將剛剛生成的Thrift.dll文件放入lib文件夾中。在解決方案分中建立兩個控制臺程序和一個類庫,控制臺程序分別命名為HelloThrift.Client 和 HelloThrift.Server,類庫命名為Thrift.Interface。Client、Server和Interface分別引用lib文件夾中的Thrift.dll文件,將準備工作中生成的HelloService文件導入到Interface類庫中。Client和Server分別引用Interface。具體結果如下圖所示

c25ca2969b9dc9dd9fad77f034feea19.png

  3. 創建完相關的項目和引用之后,在服務端HelloThrift.Server 創建一個類命名為MyHelloService,實現HelloService.Iface接口,代碼如下:

  清單1.MyHelloService

using System;using HelloThrift.Interface;namespace HelloThrift.Server{    public class MyHelloService : HelloService.Iface    {        ///         /// 只有一個參數返回值為字符串類型的方法        ///         /// string類型參數        /// 返回值為string類型        public string HelloString(string para)        {            System.Threading.Thread.Sleep(1 * 1000);            Console.WriteLine("客戶端調用了HelloString方法");            return para;        }        ///         /// 只有一個參數,返回值為int類型的方法        ///         ///         /// 返回值為int類型        public int HelloInt(int para)        {            System.Threading.Thread.Sleep(1 * 1000);            Console.WriteLine("客戶端調用了HelloInt方法");            return para;        }        ///         /// 只有一個bool類型參數,返回值為bool類型的方法        ///         ///         /// 返回值為bool類型        public bool HelloBoolean(bool para)        {            System.Threading.Thread.Sleep(1 * 1000);            Console.WriteLine("客戶端調用了HelloBoolean方法");            return para;        }        ///         /// 返回執行為空的方法        ///         public void HelloVoid()        {            System.Threading.Thread.Sleep(1 * 1000);            Console.WriteLine("客戶端調用了HelloVoid方法");            Console.WriteLine("HelloWorld");        }        ///         /// 無參數,返回值為null的方法        ///         /// 返回值為null        public string HelloNull()        {            System.Threading.Thread.Sleep(1 * 1000);            Console.WriteLine("客戶端調用了HelloNull方法");            return null;        }    }}
f04e7fa0982a60f487d3daa8fb9ef357.gif

  4. 創建服務器端HelloThrift.Server 宿主的實現代碼,在Program.cs 中添加如下代碼,這樣一個thrift 服務器就創建好了。

  清單2.HelloThrift.Server

using System;using Thrift;using Thrift.Protocol;using Thrift.Server;using Thrift.Transport;using HelloThrift.Interface;namespace HelloThrift.Server{    class Program    {        static void Main(string[] args)        {            try            {                //設置服務端口為8080                TServerSocket serverTransport = new TServerSocket(9081);                //設置傳輸協議工廠                TBinaryProtocol.Factory factory = new TBinaryProtocol.Factory();                //關聯處理器與服務的實現                TProcessor processor = new HelloService.Processor(new MyHelloService());                //創建服務端對象                TServer server = new TThreadPoolServer(processor, serverTransport, new TTransportFactory(), factory);                Console.WriteLine("服務端正在監聽9081端口");                server.Serve();            }            catch (TTransportException ex)//捕獲異常信息            {                //打印異常信息                Console.WriteLine(ex.Message);            }        }    }}

  5. 創建完服務端之后,下面開始生成一個客戶端實現代碼,在HelloThrift.Client 的 Program.cs 中添加如下代碼:

  清單3.HelloThrift.Client

using System;using HelloThrift.Interface;using Thrift.Protocol;using Thrift.Transport;namespace HelloThrift.Client{    class Program    {        static void Main(string[] args)        {            try            {                //設置服務端端口號和地址                TTransport transport = new TSocket("localhost", 9081);                transport.Open();                //設置傳輸協議為二進制傳輸協議                TProtocol protocol = new TBinaryProtocol(transport);                //創建客戶端對象                HelloService.Client client = new HelloService.Client(protocol);                //調用服務端的方法                Console.WriteLine(client.HelloString("HelloThrift"));                Console.ReadKey();            }            catch (TTransportException e)            {                Console.WriteLine(e.Message);            }        }    }}

  上面的代碼調用了服務端的HelloString方法,服務端也會返回傳入的傳輸值,客戶端將服務端返回的數據打印出來。好了完成了代碼以后,將先啟動Server,在啟動Client。客戶端調用結果 和 服務端請求顯示。

5088fcb3fdb003b5ab8dd8a8af1c7a49.png

  說明

  1. 關于使用Thrift 構建我們自己的rpc 的方法,這里基本講完了。其他的方法本文就不再演示了,調用起來都是一樣。

  2. 后續會簡單討論一下Thrift 框架的通信原理。

  3. 源代碼下載,HelloThrift.rar

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

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

相關文章

Hello Playwright:(2)簡化部署方式

前言上次的文章Hello Playwright:(1)從開發到部署發表后,有網友留言問,有不有簡化部署的方式:下面,提供 2 種可行的方案。方案 1. Copy其實 Playwright 默認是到C:\Users\用戶名\AppData\Local\ms-playwright文件夾下查…

ArcGIS實驗教程——實驗十六:空間數據查詢

ArcGIS實驗視頻教程合集:《ArcGIS實驗教程從入門到精通》(附配套實驗數據) 一、實驗描述 空間數據庫查詢定義:從空間數據庫中找出所有滿足屬性約束條件和空間約束條件的地理對象。 二、實驗內容 (一)屬性查詢 1、簡單查詢 2、SQL查詢 (二)圖形查詢 1、點查詢 2…

C++入門指南及實戰 第一步 概述及經典HelloWorld

本系列文章環境及學習門檻 編程基礎:無年齡:具有一定的邏輯思維英文:不要求數學:不要求學習時長:每天一篇,一周4-5篇即可,每篇最多1小時死記硬背:不需要,理解至上本機環…

【數學題】男女的比例

在一個重男輕女的國家里,每家每戶都想生男孩。若一戶人家生了一個男孩,就不會再生了。若一家生了一個女孩,便會再生一個,直到生下男孩為止。請問這個國家(有無限多的人民)的男女比例是多少?答案:1比1。在某一戶人家中…

為什么云服務器沒西南的_去年“雙11“我買的那臺云服務器

一、為什么會買云服務器為什么初學者需要一臺云服務器?從我自己那僅有的一點經驗來看,重點無非這一個詞:實踐。細數一下初學者擁有一臺云服務器的好處:學習操作系統、熟悉環境大部分初學者在本地使用的是windows系統,在…

Java線程安全以及線程安全的實現方式和內存模型(JMM)

一、了解幾個概念 1)臨界區: 臨界區指的是一個訪問共用資源(例如:共用設備或是共用存儲器)的程序片段,而這些共用資源又無法同時被多個線程訪問的特性。當有線程進入臨界區段時,其他線程或是進…

animate 實現滑動切換效果

今天和大家分享一下用 animate 實現滑動切換效果的小例子 ------- 來自<一只有夢想的前端小白> 大家都知道jQuery 提供的有一下幾種方法能夠實現滑動效果&#xff1a; slideDown()slideUp()slideToggle()但是以上的滑動不太方便控制其滑動的方向&#xff0c;所以我們還是…

[不一樣的依賴注入]通過遞歸實現容器里依賴注入

遞歸實現依賴注入創建所需的依賴服務類1public class Test2{3 public void PrintTest()4 {5 Console.WriteLine("Hello World");6 }7}89public class Test2 10{ 11 private readonly Test _test; 12 13 public Test2(Test test) 14 { 15 …

ArcGIS實驗教程——實驗十七:緩沖區分析(Buffer Analysis)

ArcGIS實驗視頻教程合集:《ArcGIS實驗教程從入門到精通》(附配套實驗數據) 【實驗描述】 緩沖區(Buffer)是為了識別某一地理實體對周圍地物的影響而在其周圍建立的一定寬度多邊形區域,緩沖區分析(Buffer Analysis)是用來確定不同地理要素的空間臨近性或接近程度的一種分…

Java之jdk和CGLib實現動態代理

1 jdk實現動態代理源碼實現 這里需要用到InvocationHandler接口 public interface Hello {public void sayHello(); } public class HelloImpl implements Hello {Overridepublic void sayHello() {System.out.println("hello word");} }import java.lang.reflect…

從Visual Studio中生成Linux設備

本文講的是從Visual Studio中生成Linux設備&#xff0c;【IT168 云計算頻道】近日Novell發布了SUSE Studio&#xff1a;一個用于創建Linux設備&#xff08;appliance&#xff09;的工具。與此同時&#xff0c;Mono小組創建了一個插件以從Visual Studio中生成支持SUSE的設備。 …

C++入門指南及實戰 第二步 HelloWorld及擴展詳解

回顧 在上一節中&#xff0c;我們編寫了如下代碼&#xff0c;完成了 HelloWorld程序的編寫&#xff1a; #include<iostream> using namespace std;int main(){cout <<"Hello World";return 0; }本小節將會對該代碼進行講解&#xff0c;并且解釋一下專業…

2560x1600分辨率高嗎_做設計還弄不清分辨率和像素之間的關系,來了解下他們是怎么換算...

許多同學都在問我關于像素的問題&#xff0c;為什么印刷時要300分辨率以上&#xff1f;網頁為什么72就夠了&#xff1f;做戶外噴繪30&#xff0c;甚至巨幅畫面20就上了。關于這些還是很多人不知道的&#xff0c;要不也不會被賣手機的忽悠&#xff0c;各大手機推銷員拿著手機大聲…

使用 fixture 機制重構 appium_helloworld

一、前置說明 在 pytest 基礎講解 章節,介紹了 pytest 的特性和基本用法,現在我們可以使用 pytest 的一些機制,來重構 appium_helloworld 。 appium_helloworld 鏈接: 編寫第一個APP自動化腳本 appium_helloworld ,將腳本跑起來 代碼目錄結構: pytest.ini 設置: [pyt…

linux程序調試命令strace

strace命令用法詳解: strace常用來跟蹤進程執行時的系統調用和所接收的信號。 在Linux世界&#xff0c;進程不能直接訪問硬件設備&#xff0c;當進程需要訪問硬件設備(比如讀取磁盤文件&#xff0c;接收網絡數據等等)時&#xff0c;必須由用戶態模式切換至內核態模式&#xff0…

Tomcat相關 -- 內存設置

java內存溢出詳解 一、常見的java內存溢出 1、java.lang.OutOfMemmoryError : Java heap space -- JVM Heap &#xff08;jvm 堆溢出&#xff09; JVM啟動時自動設置JVM Heap的值&#xff0c;其初始空間(即 -Xms)是物理內存的1/64&#xff0c;最大空間(-Xms)不可超過物理內存。…

CoreWCF 1.0 正式發布,支持 .NET Core 和 .NET 5+ 的 WCF

CoreWCF 項目組正式發布 1.0 版本的 CoreWCF, 這是面向 .NET Core 平臺的 WCF 移植版本。它支持 SOAP、NetTCP 和 WSDL 的相同實現。在代碼中的使用方式于 WCF 相同&#xff0c;但是升級到使用 ASP.NET Core 作為服務宿主&#xff0c;并工作在 .NET Core 平臺上。這是該項目的第…

【經典回放】多種語言系列數據結構算法:快速排序

快速排序(Quicksort)是對冒泡排序的一種改進。 快速排序由C. A. R. Hoare在1960年提出。它的基本思想是:通過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的所有數據都比另外一部分的所有數據都要小,然后再按此方法對這兩部分數據分別進行快速排序,整個排序過…

表頭合并_多個Excel表格合并數據麻煩?試試Power Query輕松幫你解決

Hi!大家好&#xff01;歡迎來到小龍自修室&#xff01;又到了小龍分享時間&#xff01;(今天的內容有點多&#xff0c;希望各位看官一定要看到最后&#xff01;有驚喜)上一篇文字小龍和大家一起制作了一個限定數據內容錄入的電子表格&#xff0c;我的表格我做主&#xff01;表格…

C++入門指南及實戰 第三步 基本變量

在C編程中&#xff0c;內置了一些基本數據類型用來存儲一些不同類型的值。有字符類型 char 用以存儲字符&#xff0c;如a、b、c、d、-、、1、2、4、3、>、?等&#xff1b;有整形 int 用以存儲整數類型&#xff0c;如1、2、3、4、5、11、111、2311等&#xff1b;有浮點類型 …