简介
Thrift是一个轻量级、语言无关的软件栈,它具有一套为RPC通信生成代码的机制
支持不同语言, 但是thrift文档资料比较少, 官网上也不是很详细http://thrift.apache.org/tutorial/
thrift拥有一套独立的网络栈, 大致分为:
+-------------------------------------------+
| Server |
| (single-threaded, event-driven etc) |
+-------------------------------------------+
| Processor |
| (compiler generated) |
+-------------------------------------------+
| Protocol |
| (JSON, compact etc) |
+-------------------------------------------+
| Transport |
| (raw TCP, HTTP etc) |
+-------------------------------------------+
-
Transport 传输层(基于tcp, http等)
提供的方法例如:
- open
- close
- read
- write
- flush
也提供了ServerTransport,主要用于服务端
-
Protocol协议层, 实现数据的表示协议, 例如json, xml等, 对transport数据加解码
Thrift的Protocol是面向流设计的,
-
Processor 处理层
封装了从输入流读取数据和从输出流写数据的能力
interface TProcessor { bool process(TProtocol in, TProtocol out) throws TException }
-
Server 服务
实现调用方法, 例如线程等
支持的类型:
bool: A boolean value (true or false)
byte: An 8-bit signed integer
i16: A 16-bit signed integer
i32: A 32-bit signed integer
i64: A 64-bit signed integer
double: A 64-bit floating point number
string: A text string encoded using UTF-8 encoding
也支持:
list
set
map
安装:
yum -y install automake libtool flex bison pkgconfig gcc-c++ boost-devel libevent-devel zlib-devel python-devel ruby-devel openssl-devel
下载并编译安装:
wget http://mirror.bit.edu.cn/apache/thrift/0.12.0/thrift-0.12.0.tar.gz
tar -zxvf thrift-0.12.0.tar.gz
cd thrift-0.12.0
./configure --with-boost=/usr/local
make -j24
make install
安装完成后查看版本:
# thrift -version
Thrift version 0.12.0
安装python thrift
pip install thrift
添加thrift IDL定义
vi add.thrift
namespace py calculator
service Calculator{
i32 add(1: i32 a, 2:i32 b),
}
编译:
thrift --gen <语言> filename
thrift --gen py add.thrift 转换编译文件
#
#thrift --gen py add.thrift
#ll
total 4
-rw-r--r-- 1 root root 81 Aug 20 17:41 add.thrift
drwxr-xr-x 3 root root 41 Aug 20 17:42 gen-py
服务端ser.py
import glob
import sys
sys.path.append('gen-py')
from calculator import Calculator
from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol
from thrift.server import TServer
class CalculatorHandler:
def __init__(self):
self.log = {}
def add(self, n1, n2):