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中itertools模块用法详解
Sep 25 Python
使用Django的模版来配合字符串翻译工作
Jul 27 Python
Python实现带百分比的进度条
Jun 28 Python
Python实现并行抓取整站40万条房价数据(可更换抓取城市)
Dec 14 Python
Python栈算法的实现与简单应用示例
Nov 01 Python
Python闭包之返回函数的函数用法示例
Jan 27 Python
python脚本生成caffe train_list.txt的方法
Apr 27 Python
查找python项目依赖并生成requirements.txt的方法
Jul 10 Python
在Pycharm中项目解释器与环境变量的设置方法
Oct 29 Python
python实现对列表中的元素进行倒序打印
Nov 23 Python
python3用PyPDF2解析pdf文件,用正则匹配数据方式
May 12 Python
Python 3.9的到来到底是意味着什么
Oct 14 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程序中的常见漏洞进行攻击(上)
2006/10/09 PHP
浅谈php serialize()与unserialize()的用法
2013/06/05 PHP
php连接odbc数据源并保存与查询数据的方法
2014/12/24 PHP
PHP基于工厂模式实现的计算器实例
2015/07/16 PHP
apache php mysql开发环境安装教程
2016/07/28 PHP
在JS中最常看到切最容易迷惑的语法(转)
2010/10/29 Javascript
JQuery的自定义事件代码,触发,绑定简单实例
2013/08/01 Javascript
基于JavaScript短信验证码如何实现
2016/01/24 Javascript
angular.js分页代码的实例
2016/07/27 Javascript
javascript事件捕获机制【深入分析IE和DOM中的事件模型】
2016/12/15 Javascript
利用types增强vscode中js代码提示功能详解
2017/07/07 Javascript
使用Angular 6创建各种动画效果的方法
2018/10/10 Javascript
JQuery判断radio单选框是否选中并获取值的方法
2019/01/17 jQuery
js实现鼠标拖拽缩放div实例代码
2019/03/25 Javascript
微信小程序实现跳转的几种方式总结(推荐)
2019/04/24 Javascript
javascript实现一款好看的秒表计时器
2020/09/05 Javascript
Python 列表排序方法reverse、sort、sorted详解
2016/01/22 Python
详谈Python2.6和Python3.0中对除法操作的异同
2017/04/28 Python
python实现list元素按关键字相加减的方法示例
2017/06/09 Python
浅谈python中的__init__、__new__和__call__方法
2017/07/18 Python
在pandas中一次性删除dataframe的多个列方法
2018/04/10 Python
python给微信好友定时推送消息的示例
2019/02/20 Python
pandas修改DataFrame列名的实现方法
2019/02/22 Python
Python模块、包(Package)概念与用法分析
2019/05/31 Python
python中单下划线(_)和双下划线(__)的特殊用法
2019/08/29 Python
python在OpenCV里实现投影变换效果
2019/08/30 Python
Python如何使用Gitlab API实现批量的合并分支
2019/11/27 Python
Python 实现加密过的PDF文件转WORD格式
2020/02/04 Python
简单了解pytest测试框架setup和tearDown
2020/04/14 Python
详解torch.Tensor的4种乘法
2020/09/03 Python
python中K-means算法基础知识点
2021/01/25 Python
大学生学习党课思想汇报
2014/01/03 职场文书
2015年感恩母亲节活动方案
2015/05/04 职场文书
贷款收入证明范本
2015/06/12 职场文书
学习心得体会
2019/06/20 职场文书
创业计划书之情侣餐厅
2019/09/29 职场文书