博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python RPC 之 Thrift
阅读量:6149 次
发布时间:2019-06-21

本文共 2866 字,大约阅读时间需要 9 分钟。

hot3.png

thrift-0.12.0  python3.4.3

Thrift 简介:

Thrift 是一款高性能、开源的 RPC 框架,产自 Facebook 后贡献给了 Apache,Thrift 囊括了整个 RPC 的上下游体系,自带序列化编译工具,因为 Thrift 采用的是二进制序列化,并且与 gRPC 一样使用的都是长连接建立 client 与 server 之间的通讯,相比于比传统的使用XML,JSON,SOAP等短连接的解决方案性能要快得多。

本篇只介绍 Python 关于 Thrift 的基础使用。

安装

  • 安装 Thrift 的 python 库有两种方案:
  1. 通过 pip 命令安装,缺点必须要有外网或者内网的 pip 源:$ pip install thrift
  1. 通过源码安装:从 github 上下载 的源码 ,解压后进入 thrift-0.10.0/lib/py 目录执行:$ python setup.py install
  • 安装 Thrift 的 IDL 编译工具
    1. windows 平台下安装:

    直接下载:,下载完成后改名为:thrift.exe 并将其放入到系统环境变量下即可使用

  1. Linux 平台下安装:

从 github 上下载 的源码,解压后进入:thrift-0.10.0/compiler/cpp 目录执行如下命令完成编译后,将其放入到系统环境变量下即可使用:

$ mkdir cmake-build
$ cd cmake-build
$ cmake ..
$ make

  • 验证是否安装成功:

$ thrift -version,如果打印出来:Thrift version 0.10.0 表明 complier 安装成功

实践:

下面我们使用 Thrift 定义一个接口,该接口实现对传入的数据进行大写的格式化处理。

  • 创建 python 项目 thrift_demo 工程:
 
 
Paste_Image.png
  1. client目录下的 client.py 实现了客户端用于发送数据并打印接收到 server 端处理后的数据
  1. server 目录下的 server.py 实现了服务端用于接收客户端发送的数据,并对数据进行大写处理后返回给客户端
  2. thrift_file 用于存放 thrift 的 IDL 文件: *.thrift
  • 定义 Thrift RPC 接口

example.thrift:

namespace py examplestruct Data {    1: string text}service format_data {    Data do_format(1:Data data),}
  • 编译 thrift 文件

进入 thrift_file 目录执行:$ thrift -out .. --gen py example.thrift,就会在 thrift_file 的同级目录下生成 python 的包:example

 
 
Paste_Image.png
  • 实现 server 端:

server.py:

#! /usr/bin/env python# -*- coding: utf-8 -*-__author__ = 'xieyanke'from example import format_datafrom example import ttypesfrom thrift.transport import TSocketfrom thrift.transport import TTransportfrom thrift.protocol import TBinaryProtocolfrom thrift.server import TServer__HOST = 'localhost'__PORT = 8080class FormatDataHandler(object):    def do_format(self, data):        return ttypes.Data(data.text.upper())if __name__ == '__main__':    handler = FormatDataHandler()    processor = format_data.Processor(handler)    transport = TSocket.TServerSocket(__HOST, __PORT)    tfactory = TTransport.TBufferedTransportFactory()    pfactory = TBinaryProtocol.TBinaryProtocolFactory()    rpcServer = TServer.TSimpleServer(processor,transport, tfactory, pfactory)    print('Starting the rpc server at', __HOST,':', __PORT)    rpcServer.serve()
  • 实现 client 端:

client.py:

#! /usr/bin/env python# -*- coding: utf-8 -*-from thrift.transport import TSocketfrom thrift.transport import TTransportfrom thrift.protocol import TBinaryProtocolfrom example.format_data import Clientfrom example.format_data import Data__HOST = 'localhost'__PORT = 8080tsocket = TSocket.TSocket(__HOST, __PORT)transport = TTransport.TBufferedTransport(tsocket)protocol = TBinaryProtocol.TBinaryProtocol(transport)client = Client(protocol)data = Data('hello,world!')transport.open()print(client.do_format(data).text)
  • 执行验证结果:
  1. 先启动 server,之后再执行 client
  1. client 侧控制台如果打印的结果为: HELLO,WORLD! ,证明 Thrift 的 RPC 接口定义成功
注意
import sys
sys.path.append(r"X:\xx\thrift_demo") #thrift_demo 目录的绝对路径

转载于:https://my.oschina.net/u/3371661/blog/2998131

你可能感兴趣的文章
(二)Spring Boot 起步入门(翻译自Spring Boot官方教程文档)1.5.9.RELEASE
查看>>
Java并发编程73道面试题及答案
查看>>
企业级负载平衡简介(转)
查看>>
ICCV2017 论文浏览记录
查看>>
科技巨头的交通争夺战
查看>>
当中兴安卓手机遇上农行音频通用K宝 -- 卡在“正在通讯”,一直加载中
查看>>
Shell基础之-正则表达式
查看>>
JavaScript异步之Generator、async、await
查看>>
讲讲吸顶效果与react-sticky
查看>>
c++面向对象的一些问题1 0
查看>>
直播视频流技术名词
查看>>
IOC —— AOP
查看>>
比特币现金将出新招,推动比特币现金使用
查看>>
数据库的这些性能优化,你做了吗?
查看>>
某大型网站迁移总结(完结)
查看>>
部署SSL证书后,网页内容造成页面错误提示的处理办法
查看>>
MS SQLSERVER通用存储过程分页
查看>>
60.使用Azure AI 自定义视觉服务实现物品识别Demo
查看>>
Oracle 冷备份
查看>>
jq漂亮实用的select,select选中后,显示对应内容
查看>>