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开发环境PyScripter中文乱码问题解决方案
Sep 11 Python
Python解决N阶台阶走法问题的方法分析
Dec 28 Python
使用 Python 实现文件递归遍历的三种方式
Jul 18 Python
Python 字符串与二进制串的相互转换示例
Jul 23 Python
详解pandas安装若干异常及解决方案总结
Jan 10 Python
Python的垃圾回收机制详解
Aug 28 Python
使用python快速在局域网内搭建http传输文件服务的方法
Nov 14 Python
python encrypt 实现AES加密的实例详解
Feb 20 Python
python实现银行实战系统
Feb 26 Python
python如何安装下载后的模块
Jul 03 Python
python3爬虫中异步协程的用法
Jul 10 Python
Python中的turtle画箭头,矩形,五角星
Mar 16 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
如何取得中文字符串中出现次数最多的子串
2013/08/08 PHP
PHP查询网站的PR值
2013/10/30 PHP
php中opendir函数用法实例
2014/11/15 PHP
常见PHP数据库解决方案分析介绍
2015/09/24 PHP
PHP实现的多进程控制demo示例
2019/07/22 PHP
CSS心形加载的动画源码的实现
2021/03/09 HTML / CSS
JavaScript接口实现代码 (Interfaces In JavaScript)
2010/06/11 Javascript
JQuery判断HTML元素是否存在的两种解决方法
2013/12/26 Javascript
浅谈关于JavaScript API设计的一些建议和准则
2015/06/24 Javascript
jquery实现动静态条形统计图
2015/08/17 Javascript
深入理解JavaScript内置函数
2016/06/03 Javascript
移动端 一个简单易懂的弹出框
2016/07/06 Javascript
js原生跨域_用script标签的简单实现
2016/09/24 Javascript
jquery封装插件时匿名函数形参和实参的写法解释
2017/02/14 Javascript
JavaScript中无法通过div.style.left获取值的解决方法
2017/02/19 Javascript
详解JavaScript对象的深浅复制
2017/03/30 Javascript
js实现登录与注册界面
2017/11/01 Javascript
vue异步axios获取的数据渲染到页面的方法
2018/08/09 Javascript
Angular刷新当前页面的实现方法
2018/11/21 Javascript
angular4自定义表单控件[(ngModel)]的实现
2018/11/23 Javascript
JavaScript获取某一天所在的星期
2019/09/05 Javascript
简述Vue中容易被忽视的知识点
2019/12/09 Javascript
JS手写一个自定义Promise操作示例
2020/03/16 Javascript
PYTHON EVAL的用法及注意事项解析
2019/09/06 Python
中东地区最大的奢侈品市场:The Luxury Closet
2019/04/09 全球购物
size?荷兰官方网站:英国高级运动鞋精品店
2020/07/24 全球购物
如何减少垃圾回收让内存更加有效使用
2013/10/18 面试题
什么是Web Service?
2012/07/25 面试题
会计专业职业规划:规划自我赢取未来
2014/02/12 职场文书
医学生就业推荐表自我鉴定
2014/03/26 职场文书
工业设计毕业生自荐信
2014/04/13 职场文书
供货协议书
2014/04/22 职场文书
高一学年自我鉴定范文(3篇)
2014/09/26 职场文书
个人创业事迹材料
2014/12/30 职场文书
保护地球的宣传语
2015/07/13 职场文书
详解Spring Bean的配置方式与实例化
2022/06/10 Java/Android