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 ORM框架SQLAlchemy学习笔记之数据添加和事务回滚介绍
Jun 10 Python
Python中使用urllib2防止302跳转的代码例子
Jul 07 Python
Python中使用PIL库实现图片高斯模糊实例
Feb 08 Python
利用python微信库itchat实现微信自动回复功能
May 18 Python
python 寻找list中最大元素对应的索引方法
Jun 28 Python
python 调用pyautogui 实时获取鼠标的位置、移动鼠标的方法
Aug 27 Python
Python实现实时数据采集新型冠状病毒数据实例
Feb 04 Python
Python开发之pip安装及使用方法详解
Feb 21 Python
Pycharm远程连接服务器并实现代码同步上传更新功能
Feb 25 Python
Python flask框架端口失效解决方案
Jun 04 Python
工程师必须了解的LRU缓存淘汰算法以及python实现过程
Oct 15 Python
pycharm配置安装autopep8自动规范代码的实现
Mar 02 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生成不重复随机数、数组的4种方法分享
2015/03/30 PHP
php生成txt文件实例代码介绍
2016/04/28 PHP
php安装ssh2扩展的方法【Linux平台】
2016/07/20 PHP
PHP dirname功能及原理实例解析
2020/10/28 PHP
JS中confirm,alert,prompt函数使用区别分析
2010/04/01 Javascript
JQuery从头学起第二讲
2010/07/04 Javascript
Highcharts 非常实用的Javascript统计图demo示例
2013/07/03 Javascript
Javascript技术栈中的四种依赖注入小结
2016/02/27 Javascript
基于Bootstrap的Metronic框架实现条码和二维码的生成及打印处理操作
2016/08/29 Javascript
JS排序之快速排序详解
2017/04/08 Javascript
JS简单实现自定义右键菜单实例
2017/05/31 Javascript
Vue的土著指令和自定义指令实例详解
2018/02/04 Javascript
vue实现点击关注后及时更新列表功能
2018/06/26 Javascript
详解如何在微信小程序中愉快地使用sass
2018/07/30 Javascript
Vue文件配置全局变量的实例
2018/09/06 Javascript
JavaScript解析及序列化JSON的方法实例分析
2019/01/04 Javascript
Vue2.0实现组件之间数据交互和通信操作示例
2019/05/16 Javascript
python sort、sorted高级排序技巧
2014/11/21 Python
Go语言基于Socket编写服务器端与客户端通信的实例
2016/02/19 Python
python的文件操作方法汇总
2017/11/10 Python
python+opencv实现动态物体识别
2018/01/09 Python
Pandas 数据框增、删、改、查、去重、抽样基本操作方法
2018/04/12 Python
kaggle+mnist实现手写字体识别
2018/07/26 Python
selenium使用chrome浏览器测试(附chromedriver与chrome的对应关系表)
2018/11/29 Python
python删除文件夹下相同文件和无法打开的图片
2019/07/16 Python
Python 正则表达式 re.match/re.search/re.sub的使用解析
2019/07/22 Python
浅谈django channels 路由误导
2020/05/28 Python
Lululemon英国官网:加拿大瑜伽服装品牌
2019/01/14 全球购物
Rentalcars.com中国:世界上最大的在线汽车租赁服务
2019/08/22 全球购物
中学教师实习自我鉴定
2013/09/28 职场文书
2014年五四青年节活动方案
2014/03/29 职场文书
新文化运动的口号
2014/06/21 职场文书
员工安全责任书范本
2014/07/24 职场文书
redis内存空间效率问题的深入探究
2021/05/17 Redis
Python 中random 库的详细使用
2021/06/03 Python
SpringBoot中HttpSessionListener的简单使用方式
2022/03/17 Java/Android