您的位置:首页 > 编程语言 > C#

C#实现Thrift服务端与客户端

2017-08-12 14:48 573 查看
这一篇是将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服务端与客户端
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  thrift c#