python thrift搭建服务端和客户端测试程序


Posted in Python onJanuary 17, 2018

本文生动简洁介绍了如何通过python搭建一个服务端和客户端的简单测试程序。

一、简介

thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 这些编程语言间无缝结合的、高效的服务。

二、安装

1.下载地址

http://www.apache.org/dyn/closer.cgi?path=/thrift/0.9.2/thrift-0.9.2.tar.gz

2.安装

[root@localhost ~]# yum -y groupinstall "Development Tools"
[root@localhost ~]# yum -y install libevent-devel zlib-devel openssl-devel autoconf automake
[root@localhost ~]# wget http://ftp.gnu.org/gnu/bison/bison-2.5.1.tar.gz 
[root@localhost ~]# tar xf bison-2.5.1.tar.gz
[root@localhost ~]# cd bison-2.5.1
[root@localhost ~]# ./configure --prefix=/usr
[root@localhost ~]# make
[root@localhost ~]# make install
[root@localhost ~]# tar xf thrift-0.9.2.tar.gz 
[root@localhost ~]# cd thrift-0.9.2
[root@localhost thrift-0.9.2]# ./configure -with-lua=no

3.安装python插件

pip install thrift

三、准备服务器端

1.编辑接口文件helloworld.thrift:

#!/usr/bin/env python 
import socket
import sys
sys.path.append('./gen-py') 
from helloworld import HelloWorld 
from helloworld.ttypes import *
 from thrift.transport import TSocket
 from thrift.transport import TTransport
 from thrift.protocol import TBinaryProtocol
 from thrift.server import TServer
 class HelloWorldHandler: 
   def ping(self):  
     return "pong"  
   def say(self, msg):
    ret = "Received: " + msg  
   print ret  
   return ret
#创建服务端
handler = HelloWorldHandler()
processor = HelloWorld.Processor(handler)
#监听端口
transport = TSocket.TServerSocket("localhost", 9090)
#选择传输层
tfactory = TTransport.TBufferedTransportFactory()
#选择传输协议
pfactory = TBinaryProtocol.TBinaryProtocolFactory()
#创建服务端 
server = TServer.TSimpleServer(processor, transport, tfactory, pfactory) 
print "Starting thrift server in python..."
server.serve()
print "done!"

四、准备客户端

#!/usr/bin/env python

import sys
sys.path.append('./gen-py')

from helloworld import HelloWorld #引入客户端类

from thrift import Thrift 
from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol

try:
 #建立socket
 transport = TSocket.TSocket('localhost', 9090)
 #选择传输层,这块要和服务端的设置一致
 transport = TTransport.TBufferedTransport(transport)
 #选择传输协议,这个也要和服务端保持一致,否则无法通信
 protocol = TBinaryProtocol.TBinaryProtocol(transport)
 #创建客户端
 client = HelloWorld.Client(protocol)
 transport.open()

 print "client - ping"
 print "server - " + client.ping()

 print "client - say"
 msg = client.say("Hello!")
 print "server - " + msg
 #关闭传输
 transport.close()
#捕获异常
except Thrift.TException, ex:
 print "%s" % (ex.message)

PS.这个就是thrift的服务端和客户端的实现小案例。一般只有在多种语言联合开发时才会用到,如果是一种语言的话,thrift就没有用武之地了。在多语言开发时,我们拿到其他语言的thrift文件,就可以直接使用我们的python作为客户端去调用thrift中的函数就可以了,或者我们提供thrift服务端文件供别的语言调用,总起来说还是很方便的,希望上面的例子可以让大家明白thrift的简单应用!

Python 相关文章推荐
Python可变参数用法实例分析
Apr 02 Python
Python三级菜单的实例
Sep 13 Python
Python探索之自定义实现线程池
Oct 27 Python
Python无损音乐搜索引擎实现代码
Feb 02 Python
基于numpy中数组元素的切片复制方法
Nov 15 Python
彻底理解Python中的yield关键字
Apr 01 Python
Python3.5内置模块之os模块、sys模块、shutil模块用法实例分析
Apr 27 Python
python实现QQ批量登录功能
Jun 19 Python
tensorflow ckpt模型和pb模型获取节点名称,及ckpt转pb模型实例
Jan 21 Python
SpringBoot实现登录注册常见问题解决方案
Mar 04 Python
Python selenium爬取微信公众号文章代码详解
Aug 12 Python
python Matplotlib基础--如何添加文本和标注
Jan 26 Python
Python元字符的用法实例解析
Jan 17 #Python
Python工程师面试必备25条知识点
Jan 17 #Python
python根据unicode判断语言类型实例代码
Jan 17 #Python
Python线性方程组求解运算示例
Jan 17 #Python
快速了解Python开发中的cookie及简单代码示例
Jan 17 #Python
Python基于高斯消元法计算线性方程组示例
Jan 17 #Python
Python实现将照片变成卡通图片的方法【基于opencv】
Jan 17 #Python
You might like
php cookie工作原理与实例详解
2016/07/18 PHP
CI(CodeIgniter)框架实现图片上传的方法
2017/03/24 PHP
Javascript调用XML制作连动下拉列表框
2006/06/25 Javascript
jquery实现表格奇数偶数行不同样式(有图为证及实现代码)
2013/01/23 Javascript
Jquery+asp.net后台数据传到前台js进行解析的方法
2014/05/11 Javascript
DOM节点深度克隆函数cloneNode()用法实例
2015/01/12 Javascript
学做Bootstrap的第一个页面
2016/05/15 HTML / CSS
深入理解事件冒泡(Bubble)和事件捕捉(capture)
2016/05/28 Javascript
JavaScript Ajax实现异步通信
2016/12/14 Javascript
nodejs中使用HTTP分块响应和定时器示例代码
2017/03/19 NodeJs
JSON创建键值对(key是中文或者数字)方式详解
2017/08/24 Javascript
JavaScript模拟实现封装的三种方式及写法区别
2017/10/27 Javascript
解决node-sass偶尔安装失败的方法小结
2018/12/05 Javascript
element-ui表格合并span-method的实现方法
2019/05/21 Javascript
后台使用freeMarker和前端使用vue的方法及遇到的问题
2019/06/13 Javascript
ES6 class的应用实例分析
2019/06/27 Javascript
在vue中嵌入外部网站的实现
2020/11/13 Javascript
SpringBoot在yml配置文件中配置druid的操作
2020/11/16 Javascript
深入理解Python中装饰器的用法
2016/06/28 Python
Python抓取手机号归属地信息示例代码
2016/11/28 Python
Python实现简单遗传算法(SGA)
2018/01/29 Python
pandas.DataFrame选取/排除特定行的方法
2018/07/03 Python
对Pandas MultiIndex(多重索引)详解
2018/11/16 Python
Python 通过微信控制实现app定位发送到个人服务器再转发微信服务器接收位置信息
2019/08/05 Python
使用Python的Turtle绘制哆啦A梦实例
2019/11/21 Python
Python修改列表值问题解决方案
2020/03/06 Python
python中return如何写
2020/06/18 Python
美国著名的婴儿学步鞋老品牌:Robeez
2016/08/20 全球购物
毕业生文员求职信
2013/11/03 职场文书
最新个人职业生涯规划书
2014/01/22 职场文书
探矿工程师自荐信
2014/01/24 职场文书
高中英语教学反思
2014/02/04 职场文书
学生安全责任书模板
2014/07/25 职场文书
如何利用js在两个html窗口间通信
2021/04/27 Javascript
MySQL创建管理LIST分区
2022/04/13 MySQL
Python数组变形的几种实现方法
2022/05/30 Python