浅谈thrift

插序

毕业五年多了,才开始编写自己的博客,真是惭愧,希望自己写博客的生涯能就此发芽开花结果.虽说有点晚了,但就像哈佛大学图书馆中名言一样:觉得为时已晚的时候,恰恰是最早的时候.那就开始吧,废话不多说,进入主题,谈谈我对thrift的浅见(针对C++语言).

认识thrift

官方的表述:Thrift是一种接口描述语言和二进制通讯协议,它被用来定义和创建跨语言的服务。它被当作一个远程过程调用(RPC)框架来使用,是由Facebook为“大规模跨语言服务开发”而开发的。它结合了功能强大的软件堆栈和代码生成引 擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 这些编程语言间无缝结合的、高效的服务。
自己理解:thrift是一个跨平台跨语言进行通信的协议和工具,为了解决不同机器上的不同语言开发的进程之间通信,提供了方便,开发者不用关心平台和语言不同的进程之间如何通信,通过一个中间语言IDL(接口定义语言)来定义RPC的数据类型和接口就可方便实现,使用起来非常简单,thrift内部底层实现依然使用经典的socket通信方式.

thrift的协议栈结构

在这里插入图片描述
thrift是一种非常典型的c/s的架构体系。在最上层是用户自行实现的业务逻辑代码。
第二层是由thrift编译器自动生成的代码,主要用于结构化数据的解析,发送和接收。TServer主要任务是高效的接受客户端请求,并将请求转发给Processor处理。Processor负责对客户端的请求做出响应,包括RPC请求转发,调用参数解析和用户逻辑调用,返回值写回等处理。
从TProtocol以下部分是thirft的传输协议和底层I/O通信。TProtocol是用于数据类型解析的,将结构化数据转化为字节流给TTransport进行传输。TTransport是与底层数据传输密切相关的传输层,负责以字节流方式接收和发送消息体,不关注是什么数据类型。底层IO负责实际的数据传输,包括socket、文件和压缩数据流等。

thrift下载及安装

thrift官网给出了非常详尽的安装方式,thrift下载及安装官网.(Basic requirements:automake,boost等)
需要注意的是(亲身尝试过的坑):thrift0.13.0版本 和 0.12.0版本及其之前版本,接口使用的差别很大.如果你的代码是0.12.0之前版本写的,你却安装了0.13.0版本thrift,那么你的/usr/local/include/thrift目录下就缺少stdcxx.h文件,代码编译就会报错,原因是0.12.0之前版本使用boost里面的c11标准,而0.13.0版本直接使用c++里面的c11标准.代码使用方面的差异:0.12.0之前版本使用::apache::thrift::stdcxx::shared_ptr<***>结构,而0.13.0版本使用::std::shared_ptr<***>

thrift的使用

1.写一个"某某.thrift" 文件(就是前面提到的,用IDL定义接口文件)
2.运行命令thrift --gen language Thriftfilename(例如:thrift -r --gen cpp tutorial.thrift,如果.thrift有包含关系,请加上-r选项),你需要什么语言的接口代码,在language里面填写对应语言即可.
这样你就可以生成你想要的接口文件;每个".thrift"文件(包括include “.thrift")都会生成_types.h **_types.cpp **_constants.h **_constants.cpp. “.thrift"文件文件中的每个service名称都会生成一个"某某.h” 和"某某.cpp"及"某某_server.skeleton.h”
.某某_server.skeleton.cpp是服务端需要的,客户端不需要,它里面已经把框架结构搭建好了,你只需要在里面实现自己的功能就可以了.
3.最后就是编写客户端程序(客户端可以远程机器,也可以是和服务端不同语言的程序代码),由于之前提到thrift是socket通信,所以客户端必须知晓服务端的IP和端口号才能通信.接下来就是开启服务程序,然后启动客户端,实现客户端和服务端通信.

好了,是不是很简单.把握thrift核心精髓是关键.不算太难吧,博主花了三天左右时间弄懂的,有不足之处请提出,敬请谅解,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值