1. 程式人生 > >C#實現Thrift服務端與客戶端

C#實現Thrift服務端與客戶端

這一篇是將Android和C#實現Thrift服務端和客戶端中C#部分單獨拆分開來的,方便不需要Android的開發者使用。
編寫Thrift檔案
寫個簡單的,有輸入引數,無返回值,檔案命名為 HelloWorld.thrift

service HelloWorldService{
    void SayHello(1:string msg);
}

根據Thrift檔案生成對應的C#和java檔案,生成的C#和java都只有一個檔案。

這裡寫圖片描述

可以看到我用的是Thrift 0.10.0版本

C# Thrift服務端和客戶端實現,並實現訊息傳送及接收
建立一個WinForm應用程式,命名為Thrift_HelloWorld_Csharp。
將生成的C#檔案拷到專案中,幷包含在專案裡。在Nuget中新增thrift-csharp的引用,0.10.0版本的。
目錄結構如圖:

這裡寫圖片描述

最後要實現的效果是:當前程式啟動一個Thrift服務,並且能通過當前程式呼叫Thrift Client傳送訊息到服務端。
效果如下:
這裡寫圖片描述

點選【啟動】即可啟動C#服務端,填寫完正確的埠號,點選【傳送】即可完成訊息傳送,因為是在本機測試,所以Ip地址固定為127.0.0.1。輸入Android映射出來的埠號即可完成與Android服務端通訊。

Thrift Server 程式碼:

    public class HelloWorldServer : HelloWorldService.Iface
    {
        public static void Run(int port)
        {
            HelloWorldServer client = new
HelloWorldServer(); HelloWorldService.Processor processor = new global::HelloWorldService.Processor(client); TServerTransport transport = new TServerSocket(port); TServer server = new TThreadPoolServer(processor, transport); Console.WriteLine("Starting the server..."
); server.Serve(); transport.Close(); } public void SayHello(string msg) { Console.WriteLine(string.Format("{0:yyyy/MM/dd hh:mm:ss} {1}", DateTime.Now, msg)); } }

呼叫Run方法即可啟動Thrift服務,需另開一個執行緒執行此方法才不會阻塞下面的功能。

Thrift Client傳送訊息至服務端程式碼:

    public static class HelloWorldClient
    {
        public static void Say(int port, string msg, string ip = "127.0.0.1")
        {
            TTransport transport = new TSocket(ip, port);
            TProtocol protocol = new TBinaryProtocol(transport);
            HelloWorldService.Client client = new HelloWorldService.Client(protocol);

            transport.Open();
            try
            {
                client.SayHello(msg);
            }
            catch (TApplicationException x)
            {
                Console.WriteLine(x.StackTrace);

            }
            finally
            {
                transport.Close();
            }
        }
    }

呼叫Say方法即可實現訊息傳送。當將port設定為服務端埠號時即可實現傳送訊息至當前服務端。
就是這麼簡單。
原始碼地址:
C#實現的Thrift服務端與客戶端