初识Thrift 及 Thrift示例

简介

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)                       |
  +-------------------------------------------+
  1. Transport 传输层(基于tcp, http等)

    提供的方法例如:

    • open
    • close
    • read
    • write
    • flush

也提供了ServerTransport,主要用于服务端

  1. Protocol协议层, 实现数据的表示协议, 例如json, xml等, 对transport数据加解码

    Thrift的Protocol是面向流设计的,

  2. Processor 处理层

    封装了从输入流读取数据和从输出流写数据的能力

    interface TProcessor {
         
        bool process(TProtocol in, TProtocol out) throws TException
    }
    
  3. 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):
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值