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中的应用之translate和maketrans用法详解
Aug 27 Python
Python中的引用和拷贝浅析
Nov 22 Python
Python生成随机MAC地址
Mar 10 Python
基于循环神经网络(RNN)实现影评情感分类
Mar 26 Python
Python3.6基于正则实现的计算器示例【无优化简单注释版】
Jun 14 Python
更新pip3与pyttsx3文字语音转换的实现方法
Aug 08 Python
python银行系统实现源码
Oct 25 Python
在Python中使用filter去除列表中值为假及空字符串的例子
Nov 18 Python
python中的split()函数和os.path.split()函数使用详解
Dec 21 Python
python判断是空的实例分享
Jul 06 Python
Pytorch框架实现mnist手写库识别(与tensorflow对比)
Jul 20 Python
Python中正则表达式对单个字符,多个字符和匹配边界等使用
Jan 27 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
mysql+php分页类(已测)
2008/03/31 PHP
php+jquery编码方面的一些心得(utf-8 gb2312)
2010/10/12 PHP
IIS 7.5 asp Session超时时间设置方法
2017/04/17 PHP
php在linux环境中如何使用redis详解
2020/12/15 PHP
javascript concat数组累加 示例
2009/09/03 Javascript
JavaScript高级程序设计 事件学习笔记
2011/09/10 Javascript
js jquery验证银行卡号信息正则学习
2013/01/21 Javascript
js实现身份证号码验证的简单实例
2014/02/19 Javascript
php,js,css字符串截取的办法集锦
2014/09/26 Javascript
NodeJS学习笔记之(Url,QueryString,Path)模块
2015/01/13 NodeJs
在Node.js应用中使用Redis的方法简介
2015/06/24 Javascript
jQuery手动点击实现图片轮播特效
2020/04/20 Javascript
AngularJS 模块化详解及实例代码
2016/09/14 Javascript
JS判断两个对象内容是否相等的方法示例
2017/04/10 Javascript
Node.js 回调函数实例详解
2017/07/06 Javascript
浅谈js中的this问题
2017/08/31 Javascript
jQuery pjax 应用简单示例
2018/09/20 jQuery
ajax与jsonp的区别及用法
2018/10/16 Javascript
仿ElementUI实现一个Form表单的实现代码
2019/04/23 Javascript
js最实用string(字符串)类型的使用及截取与拼接详解
2019/04/26 Javascript
初试vue-cli使用HBuilderx打包app的坑
2019/07/17 Javascript
[06:33]3.19 DOTA2发布会 海涛、冷冷、2009见证希望
2014/03/21 DOTA
解决Django的request.POST获取不到内容的问题
2018/05/28 Python
Joules美国官网:出色的英国风格
2017/10/30 全球购物
Nicole Miller官方网站:纽约女装品牌
2019/09/14 全球购物
车间主管岗位职责
2013/11/14 职场文书
高中自我评价分享
2013/12/05 职场文书
工业设计专业个人求职信范文
2013/12/28 职场文书
合唱兴趣小组活动总结
2014/07/10 职场文书
物业消防安全责任书
2014/07/23 职场文书
签约仪式致辞
2015/07/30 职场文书
高一军训感想
2015/08/07 职场文书
运动会广播稿300字
2015/08/19 职场文书
诺贝尔奖获得者名言100句:句句启人心智,值永久收藏
2019/08/09 职场文书
Mysql中一千万条数据怎么快速查询
2021/12/06 MySQL
阿里云国际版 使用Nginx作为HTTPS转发代理服务器
2022/05/11 Servers