对thrift的简单初步理解
前言:
最近老师让学thrift,刚开始学觉得很难啊(还没有学过JAVA,边研究边学)花了三天时间研究这个东西,虽然现在也觉得很难,但至少能看懂一点了,简单记录一下心得
了解thrift 首先需要理解它的定义
thrift架构
Thrift是一个跨语言的服务部署框架,最初由Facebook于2007年开发,2008年进入Apache开源项目。Thrift通过IDL(Interface Definition Language,接口定义语言)来定义RPC(Remote Procedure Call,远程过程调用)的接口和数据类型,然后通过thrift编译器生成不同语言的代码(目前支持C++,Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk和OCaml),并由生成的代码负责RPC协议层和传输层的实现。
需要了解几个关键字
IDL(接口定义语言),简言之,就是一个有自己的固定语法(独立于不同语言)来描述接口的语言, 使不同的平台上运行的对象及用不同语言编写的程序之间可以进行沟通交流。
RPC(远程过程调用),它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议(官方解释),举个例子讲的话,大概就是你有自己的仓库和商店,自给自足,突然有一天仓库的货不够了,订单又急,这时你就需要去很远的地方别人的仓库取货,问题来了,你同样需要考虑很多东西,路线规划,与那边取得联系等等,RPC就是在你和远方仓库之间建立一个类似快捷通道的东西,使你可以快速的调用那里的货物,实现交流。
thrift编译器就是在下载thrift时自带的东西
接下来我们就需要了解thrift的具体架构图
底层Underlying I/O以上的部分,都是由thrift编译器生成的代码,我的理解是thrift需要通过这一系列的过程生成接口文件,生成接口文件后,就可以开发客户端和服务端代码了,当然在这一过程中需要调用接口文件并保持其不变。
具体的过程开始之前需要了解各个阶段的含义
图中,TProtocol(协议层),定义数据传输格式,例如:
TBinaryProtocol:二进制格式;
TCompactProtocol:压缩格式;
TJSONProtocol:JSON格式;
TSimpleJSONProtocol:提供JSON只写协议, 生成的文件很容易通过脚本语言解析;
TDebugProtocol:使用易懂的可读的文本格式,以便于debug
TTransport(传输层),定义数据传输方式,可以为TCP/IP传输,内存共享或者文件共享等)被用作运行时库。
TSocket:阻塞式socker;
socket的含义(用于网络通信及开发的接口)
TFramedTransport:以frame为单位进行传输,非阻塞式服务中使用;
TFileTransport:以文件形式进行传输;
TMemoryTransport:将内存用于I/O,java实现时内部实际使用了简单的ByteArrayOutputStream;
TZlibTransport:使用zlib进行压缩, 与其他传输方式联合使用,当前无java实现;
Thrift支持的服务模型
TSimpleServer:简单的单线程服务模型,常用于测试;
TThreadPoolServer:多线程服务模型,使用标准的阻塞式IO;
TNonblockingServer:多线程服务模型,使用非阻塞式IO(需使用TFramedTransport数据传输方式);
具体的详细理解在以下地址(大牛们写的都很好,很容易理解)
https://www.cnblogs.com/yjmyzz/p/4823082.html
https://www.cnblogs.com/chenny7/p/4224720.html
https://blog.csdn.net/houjixin/article/details/42778335
还有具体的操作实例,可以参考以下实验室同学写的博客,很有用
https://blog.csdn.net/hello_baby6/article/details/95031543