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中的__slots__缓存资源以节省内存开销的方法
Apr 02 Python
python简单分割文件的方法
Jul 30 Python
Python使用gensim计算文档相似性
Apr 10 Python
Python使用字典的嵌套功能详解
Feb 27 Python
python设计微型小说网站(基于Django+Bootstrap框架)
Jul 08 Python
python默认参数调用方法解析
Feb 09 Python
django rest framework serializer返回时间自动格式化方法
Mar 31 Python
使用OpenCV获取图像某点的颜色值,并设置某点的颜色
Jun 02 Python
python定时截屏实现
Nov 02 Python
python 根据列表批量下载网易云音乐的免费音乐
Dec 03 Python
python中复数的共轭复数知识点总结
Dec 06 Python
Python学习开发之图形用户界面详解
Aug 23 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获取数组中重复最多的元素的实现方法
2014/11/11 PHP
php函数mkdir实现递归创建层级目录
2016/10/27 PHP
laravel 输出最后执行sql 附:whereIn的使用方法
2019/10/10 PHP
javaScript 计算两个日期的天数相差(示例代码)
2013/12/27 Javascript
对 jQuery 中 data 方法的误解分析
2014/06/18 Javascript
js 动态修改css文件的方法
2014/08/05 Javascript
jQuery实现高亮显示的方法
2015/03/10 Javascript
AngularJS过滤器详解及示例代码
2016/08/16 Javascript
移动端点击态处理的三种实现方式
2017/01/12 Javascript
bootstrap timepicker在angular中取值并转化为时间戳
2017/06/13 Javascript
jQuery中过滤器的基本用法示例
2017/10/11 jQuery
纯JavaScript实现实时反馈系统时间
2017/10/26 Javascript
AngularJS实现的锚点楼层跳转功能示例
2018/01/02 Javascript
JavaScript中Object基础内部方法图
2018/02/05 Javascript
微信小程序动态生成二维码的实现代码
2018/07/25 Javascript
vue代码分割的实现(codesplit)
2018/11/13 Javascript
如何在微信小程序中存setStorage
2019/12/13 Javascript
关于IDEA中的.VUE文件报错 Export declarations are not supported by current JavaScript version
2020/10/17 Javascript
[01:10]DOTA2 Supermajor:英雄,由我们见证
2018/05/14 DOTA
python基础知识小结之集合
2015/11/25 Python
用python实现简单EXCEL数据统计的实例
2017/01/24 Python
python批量复制图片到另一个文件夹
2018/09/17 Python
基于Python中的yield表达式介绍
2019/11/19 Python
Python切割图片成九宫格的示例代码
2020/03/10 Python
Keras实现将两个模型连接到一起
2020/05/23 Python
关于Kotlin中SAM转换的那些事
2020/09/15 Python
Django自带的用户验证系统实现
2020/12/18 Python
大学生的应聘自我评价
2013/12/13 职场文书
创业计划书如何吸引他人眼球
2014/01/10 职场文书
文明餐桌行动实施方案
2014/02/19 职场文书
建筑工程专业大学生求职信
2014/04/23 职场文书
党员批评与自我批评思想汇报(集锦)
2014/09/14 职场文书
资料员岗位职责
2015/02/10 职场文书
解决MySQL存储时间出现不一致的问题
2021/04/28 MySQL
quickjs 封装 JavaScript 沙箱详情
2021/11/02 Javascript
Python之matplotlib绘制饼图
2022/04/13 Python