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脚本来获取Cisco设备信息的示例
May 04 Python
Python科学计算之Pandas详解
Jan 15 Python
Python的IDEL增加清屏功能实例
Jun 19 Python
python3 pandas 读取MySQL数据和插入的实例
Apr 20 Python
Python实现分段线性插值
Dec 17 Python
Python图像处理实现两幅图像合成一幅图像的方法【测试可用】
Jan 04 Python
Django 实现admin后台显示图片缩略图的例子
Jul 28 Python
python 协程中的迭代器,生成器原理及应用实例详解
Oct 28 Python
tensorflow 实现打印pb模型的所有节点
Jan 23 Python
Python GUI编程学习笔记之tkinter界面布局显示详解
Mar 30 Python
matplotlib设置颜色、标记、线条,让你的图像更加丰富(推荐)
Sep 25 Python
Python中Qslider控件实操详解
Feb 20 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来处理多个提交任务
2008/05/08 PHP
解析:通过php socket并借助telnet实现简单的聊天程序
2013/06/18 PHP
PHP错误和异长常处理总结
2014/03/06 PHP
destoon安全设置中需要设置可写权限的目录及文件
2014/06/21 PHP
laravel与thinkphp之间的区别与优缺点
2021/03/02 PHP
PHP7 新增功能
2021/03/09 PHP
麦鸡的TAB切换功能结合了javascript和css
2007/12/17 Javascript
jQuery select操作控制方法小结
2010/05/26 Javascript
原生js 秒表实现代码
2012/07/24 Javascript
javascript 获取模态窗口的滚动位置代码
2013/08/06 Javascript
jQuery 设置 CSS 属性示例介绍
2014/01/16 Javascript
jquery处理json对象
2014/11/03 Javascript
javascript实现显示和隐藏div方法汇总
2015/08/14 Javascript
jQuery插件Validate实现自定义表单验证
2016/01/18 Javascript
jQuery 获取屏幕高度、宽度的简单实现案例
2016/05/17 Javascript
js微信分享API
2020/10/11 Javascript
js带闹铃功能的倒计时代码
2016/09/29 Javascript
微信小程序 Record API详解及实例代码
2016/09/30 Javascript
JS异步加载的三种实现方式
2017/03/16 Javascript
jQuery无冲突模式详解
2019/01/17 jQuery
Vue和React组件之间的传值方式详解
2019/01/31 Javascript
JavaScript正则表达式验证登录实例
2020/03/18 Javascript
vue-video-player视频播放器使用配置详解
2020/10/23 Javascript
在vue中给后台接口传的值为数组的格式代码
2020/11/12 Javascript
js canvas实现五子棋小游戏
2021/01/22 Javascript
python根据距离和时长计算配速示例
2014/02/16 Python
Python的高级Git库 Gittle
2014/09/22 Python
linux安装python修改默认python版本方法
2019/03/31 Python
Django中如何使用sass的方法步骤
2019/07/09 Python
python3 pillow模块实现简单验证码
2019/10/31 Python
python实现飞机大战项目
2020/03/11 Python
客服服务心得体会
2013/12/30 职场文书
我为党旗添光彩演讲稿
2014/09/10 职场文书
师德师风培训感言
2015/08/03 职场文书
2016大学生毕业实习心得体会
2016/01/23 职场文书
详解Mysq MVCC多版本的并发控制
2022/04/29 MySQL