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实现将pvr格式转换成pvr.ccz的方法
Apr 28 Python
python3.4下django集成使用xadmin后台的方法
Aug 15 Python
基于Python闭包及其作用域详解
Aug 28 Python
Python针对给定列表中元素进行翻转操作的方法分析
Apr 27 Python
pyqt弹出新对话框,以及关闭对话框获取数据的实例
Jun 18 Python
python读csv文件时指定行为表头或无表头的方法
Jun 26 Python
python过滤中英文标点符号的实例代码
Jul 15 Python
pytorch中的自定义数据处理详解
Jan 06 Python
Anaconda和ipython环境适配的实现
Apr 22 Python
利用python进行数据加载
Jun 20 Python
用 Python 定义 Schema 并生成 Parquet 文件详情
Sep 25 Python
彻底弄懂Python中的回调函数(callback)
Jun 25 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
推荐5款跨平台的PHP编辑器
2014/12/25 PHP
php 数组处理函数extract详解及实例代码
2016/11/23 PHP
PHP利用正则表达式将相对路径转成绝对路径的方法示例
2017/02/28 PHP
让ThinkPHP的模板引擎达到最佳效率的方法详解
2017/03/14 PHP
jquery 必填项判断表单是否为空的方法
2008/09/14 Javascript
网页中的图片的处理方法与代码
2009/11/26 Javascript
基于jquery的让页面控件不可用的实现代码
2010/04/27 Javascript
jquery 实现checkbox全选,反选,全不选等功能代码(奇数)
2012/10/24 Javascript
angularJS结合canvas画图例子
2015/02/09 Javascript
JS动态添加iframe的代码
2015/09/14 Javascript
javascript cookie的简单应用
2016/02/24 Javascript
实例讲解JavaScript的Backbone.js框架中的View视图
2016/05/05 Javascript
浅谈jquery中的each方法$.each、this.each、$.fn.each
2016/06/23 Javascript
微信小程序 动态传参实例详解
2017/04/27 Javascript
ionic4+angular7+cordova上传图片功能的实例代码
2019/06/19 Javascript
layui实现多图片上传并限制上传的图片数量
2019/09/26 Javascript
python使用Berkeley DB数据库实例
2014/09/26 Python
Python3.x中自定义比较函数
2015/04/24 Python
python根据unicode判断语言类型实例代码
2018/01/17 Python
在python中利用最小二乘拟合二次抛物线函数的方法
2018/12/29 Python
python-pyinstaller、打包后获取路径的实例
2019/06/10 Python
解决python3 安装不了PIL的问题
2019/08/16 Python
pytorch 常用线性函数详解
2020/01/15 Python
PyCharm+Pipenv虚拟环境开发和依赖管理的教程详解
2020/04/16 Python
python 解决mysql where in 对列表(list,,array)问题
2020/06/06 Python
捷克浴室和厨房设备购物网站:SIKO
2018/08/11 全球购物
英国最大的纸工艺品商店:CraftStash
2018/12/01 全球购物
澳大利亚在线奢侈品时尚零售平台:Azura Runway
2021/01/13 全球购物
建筑自我鉴定
2013/10/19 职场文书
利群广告词
2014/03/20 职场文书
大学学生会竞选演讲稿
2014/04/25 职场文书
土木工程求职信
2014/05/29 职场文书
大学生求职自荐信范文
2015/03/04 职场文书
2016年小学生新年寄语
2015/08/18 职场文书
80行代码写一个Webpack插件并发布到npm
2021/05/24 Javascript
Java设计模式之代理模式
2022/04/22 Java/Android