【Thrift】Thrift框架和使⽤教程--CS框架使⽤教程
1、前⾔
Thrift是⼀个跨语⾔的服务部署框架,最初由Facebook于2007年开发,2008年进⼊Apache开源项⽬。Thrift通过⼀个中间语⾔(IDL, 接⼝定义语⾔)来定义RPC的接⼝和数据类型,然后通过⼀个编译器⽣成不同语⾔的代码(⽬前⽀持C++,Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk和OCaml),并由⽣成的代码负责RPC协议层和传输层的实现。
在xxx.Thrift⽂件中⽤Thrift语法写接⼝和数据类型---> ⽤thrift编译器thrift_ 编译xxx.Thrift⽂件⽣成指定语⾔的代码⽂件(如⽣成c++接⼝代码⽂件:thrift_0.8. -r --gen csharp sample.thrift)-->将代码⽂件加⼊到⼯程中,调⽤接⼝。
2、架构
Thrift实际上是实现了C/S模式,通过代码⽣成⼯具将接⼝定义⽂件⽣成服务器端和客户端代码(可以为不同语⾔),从⽽实现服务端和客户端跨语⾔的⽀持。⽤户在Thirft描述⽂件中声明⾃⼰的服务,这些
服务经过编译后会⽣成相应语⾔的代码⽂件,然后⽤户实现服务(客户端调⽤服务,服务器端提服务)便可以了。其中protocol(协议层, 定义数据传输格式,可以为⼆进制或者XML等)和transport(传输层,定义数据传输⽅式,可以为TCP/IP传输,内存共享或者⽂件共享等)被⽤作运⾏时库。
怎么样才能赚钱
实战:Thrift 框架使⽤教程
注:这个框架的强⼤之处在于它只需要写⼀个简单的thrift脚本就能⽣成不同语⾔的SourceCode,这些SourceCode包含了⼏乎所有Client端以及Server端代码,
你只需要简单⼏句代码的调⽤就能达到想要的结果,轻松实现C-S交互的跨平台。
1.安装
是针对windows平台的编译器,我们需要它在windows上编译xxx.thrift⽣成不同语⾔的代码⽂件。
2)编译Library
解压下载好的Thrift源码,在lib⽂件夹下到你所需语⾔的源码⼯程,使⽤该⼯程编译所需的Library。
2.编写thrift 脚本
编写thrift脚本的基本教程在官⽅wiki上有:
以下是⼀个最简单的例⼦:
sample.thrift
3.编译thrift 脚本
1
struct RequestStruct 2
{3
1 :i3
2 requestId 4
2 :i32 requestData 5
}//定义⼀个请求包结构6
7
8
9
struct ResponseStruct 10
{11
开机密码设置1 :i3
2 requestId 12
2 :string responseData 13
}//定义⼀个响应包结构14
15
容的部首16
17
//定义⼀个收发数据服务接⼝18
service SharedService 19
{20 ResponseStruct SendReceive(1: RequestStruct request)21}
太想念歌词解压下载好的windows编译器,执⾏以下命令⾏对脚本进⾏编译:
1//C++
2thrift-0. -r --gen cpp sample.thrift
3//C#
4thrift-0. -r --gen csharp sample.thrift
5//java
6thrift-0.13.0 -gen java sample.thrift
这⾥可能有警告信息:
[WARNING:generation:1] The 'csharp' target is deprecated. Consider using 'netstd' instead.
不⽤管它,不影响。
其中,上⾯的csharp/cpp/java是要编译的⽬标语⾔,可以替换成你想要的语⾔,编译⽣成的代码在gen-xxx⽂件夹⾥。
4.使⽤
(1) 先把从thrift脚本编译得到的代码和编译好的Library添加到你的项⽬⾥。
(2) Client端使⽤例⼦:
1//创建传输协议,这⾥⽤的是Socket,你也可以⽤Http等其它Thrift⽀持的协议
2
3TTransport transport = newTSocket("localhost", 9090);
4
5//创建数据交互协议,这⾥⽤的是Binary,你也可以⽤Jason等Thrift⽀持的协议
6
7TProtocol protocol = newTBinaryProtocol(transport);
8
9//创建client,这个Client是由thrift脚本⾃动⽣成的
10
11SharedService.Client ? client = ? newSharedService.Client(protocol);
12
13//与服务器交互开始
14
15transport.Open();
16
17//发送⼀个请求并等待服务器返回结果
18
19//请求包是由脚本的SendReceive接⼝的参数指定,下⾯的request就是请求包
20
21//响应包是由脚本的SendReceive接⼝的返回值指定,下⾯的result就是接收包
22
23RequestStruct request = newRequestStruct
24{
25
26 RequestId = 0,
27 RequestData = 1
28
29};
30
31ResponseStruct result = client.SendReceive(request);
32
33//停⽌交互
34
35transport.Close();
(3)Server端使⽤例⼦:
1//Server端⾸先要实现Iface接⼝,在这⾥对client端的请求进⾏处理,返回结果数据
2classServerHandler:
3SharedService.Iface
4{
5
6 publicServerHandler() {}
高考结束后的祝福语7 publicResponseStruct SendReceive(RequestStruct request)
8 {
9
10 ResponseStruct result = newResponseStruct()
11 {
12 RequestId = request.RequestId,
13 RequestData = "This is a return value from server"
14 };
15
16 return result;
17 }
18}
19
20
21//根据我们上⾯实现的请求处理类,创建⼀个请求处理器
22ServerHandler handler = newServerHandler();
23SharedService.Processor processor = newSharedService.Processor(handler);
24
25//创建Server端传输协议并监听端⼝,这⾥的传输协议要与client端⼀致
26TServerTransport serverTransport = newTServerSocket(9090);
27
工程管理就业前景和就业方向28//创建⼀个server,你也可以⽤多线程等Thrift⽀持的Server
29TServer server = newTSimpleServer(processor, serverTransport);
30
31//启动server并开始监听
32server.Serve();
好了,欢呼吧,就这样完成了,你是不是很惊讶使⽤thrift完成⼀个基本的C-S交互居然如此简单3、⽀持的数据传输格式、数据传输⽅式和服务模型
(1)⽀持的传输格式
TBinaryProtocol – ⼆进制格式.
TCompactProtocol – 压缩格式
TJSONProtocol – JSON格式
TSimpleJSONProtocol –提供JSON只写协议, ⽣成的⽂件很容易通过脚本语⾔解析。TDebugProtocol – 使⽤易懂的可读的⽂本格式,以便于debug
(2) ⽀持的数据传输⽅式
TSocket -阻塞式socker
TFramedTransport – 以frame为单位进⾏传输,⾮阻塞式服务中使⽤。
TFileTransport – 以⽂件形式进⾏传输。
TMemoryTransport – 将内存⽤于I/O. java实现时内部实际使⽤了简单的ByteArrayOutputStream。TZlibTransport – 使⽤zlib进⾏压缩, 与其他传输⽅式联合使⽤。当前⽆java实现。
(3)⽀持的服务模型
TSimpleServer – 简单的单线程服务模型,常⽤于测试
TThreadPoolServer – 多线程服务模型,使⽤标准的阻塞式IO。
TNonblockingServer – 多线程服务模型,使⽤⾮阻塞式IO(需使⽤TFramedTransport数据传输⽅式)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论