注:这个框架的强大之处在于它只需要写一个简单的thrift脚本就能生成不同语言的SourceCode,这些SourceCode包含了几乎所有Client端以及Server端代码,
你只需要简单几句代码的调用就能达到想要的结果,轻松实现C-S交互的跨平台。
下载页面:http://thrift.apache.org/download/
其中,thrift-0.8.0.tar.gz 是Thrift对应不同语言的源码,我们需要它来编译Library。
Thrift compiler for Windows (thrift-0.8.0.exe)是针对windows平台的编译器,我们需要它在windows上编译thrift脚本。
编写thrift脚本的基本教程在官方wiki上有:
http://wiki.apache.org/thrift/Tutorial
以下是一个最简单的例子:
struct RequestStruct
{
1: i32 requestId
2: i32 requestData
}//定义一个请求包结构
struct ResponseStruct
{
1: i32 requestId
2: string responseData
}//定义一个响应包结构
//定义一个收发数据服务接口
service SharedService
{
ResponseStruct SendReceive(1: RequestStruct request)
}
我们把它命名为sample.thrift
解压下载好的windows编译器,执行以下命令行对脚本进行编译:
thrift_0.8.0_win32.exe -r --gen csharp sample.thrift
其中,上面的csharp是要编译的目标语言,可以替换成你想要的语言。
编译生成的代码在gen-csharp文件夹里。
解压下载好的Thrift源码,在lib文件夹下找到你所需语言的源码工程,使用该工程编译所需的Library。
(1) 先把从thrift脚本编译得到的代码和编译好的Library添加到你的项目里。
(2) Client端使用例子:
//创建传输协议,这里用的是Socket,你也可以用Http等其它Thrift支持的协议
TTransport transport =newTSocket("localhost", 9090);
//创建数据交互协议,这里用的是Binary,你也可以用Jason等Thrift支持的协议
TProtocol protocol =newTBinaryProtocol(transport);
//创建client,这个Client是由thrift脚本自动生成的
SharedService.Client client = newSharedService.Client(protocol);
//与服务器交互开始
transport.Open();
//发送一个请求并等待服务器返回结果
//请求包是由脚本的SendReceive接口的参数指定,下面的request就是请求包
//响应包是由脚本的SendReceive接口的返回值指定,下面的result就是接收包
RequestStruct request = newRequestStruct
{
RequestId= 0,
RequestData= 1
};
ResponseStruct result = client.SendReceive(request);
//停止交互
transport.Close();
(3)Server端使用例子:
//Server端首先要实现Iface接口,在这里对client端的请求进行处理,返回结果数据
classServerHandler :SharedService.Iface
{
publicServerHandler(){}
publicResponseStruct SendReceive(RequestStruct request)
{
ResponseStruct result = newResponseStruct()
{
RequestId = request.RequestId,
RequestData ="This is a return value from server"
};
return result;
}
}
//根据我们上面实现的请求处理类,创建一个请求处理器
ServerHandler handler = newServerHandler();
SharedService.Processor processor = newSharedService.Processor(handler);
//创建Server端传输协议并监听端口,这里的传输协议要与client端一致
TServerTransport serverTransport =newTServerSocket(9090);
//创建一个server,你也可以用多线程等Thrift支持的Server
TServer server =newTSimpleServer(processor, serverTransport);
//启动server并开始监听
server.Serve();
好了,欢呼吧,就这样完成了,你是不是很惊讶使用thrift完成一个基本的C-S交互居然如此简单!!!!