C#實現Thrift服務端與客戶端
阿新 • • 發佈:2019-02-14
這一篇是將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服務端與客戶端