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打开网页和暂停实例
Sep 30 Python
python实现中文转换url编码的方法
Jun 14 Python
python使用tensorflow保存、加载和使用模型的方法
Jan 31 Python
Python cookbook(数据结构与算法)对切片命名清除索引的方法
Mar 13 Python
python中virtualenvwrapper安装与使用
May 20 Python
浅谈flask源码之请求过程
Jul 26 Python
老生常谈python中的重载
Nov 11 Python
python 检查文件mime类型的方法
Dec 08 Python
python scatter散点图用循环分类法加图例
Mar 19 Python
python 为什么说eval要慎用
Mar 26 Python
Python爬虫之Selenium多窗口切换的实现
Dec 04 Python
Python图片处理之图片裁剪教程
May 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
生成静态页面的PHP类
2006/07/15 PHP
PHP setcookie() cannot modify header information 的解决方法
2009/01/09 PHP
Laravel接收前端ajax传来的数据的实例代码
2017/07/20 PHP
Laravel框架分页实现方法分析
2018/06/12 PHP
javascript面向对象编程(一) 实例代码
2010/06/25 Javascript
jQuery结合Json提交数据到Webservice,并接收从Webservice返回的Json数据
2011/02/18 Javascript
文本框获得焦点和失去焦点的判断代码
2012/03/18 Javascript
结合JQ1.9通过js正则判断各种浏览器版本的方法
2013/12/30 Javascript
js读写json文件实例代码
2014/10/21 Javascript
基于jquery实现省市联动效果
2015/11/23 Javascript
JavaScript原生对象常用方法总结(推荐)
2016/05/13 Javascript
jQuery 调用WebService 实例讲解
2016/06/28 Javascript
使用ionic播放轮询广告的实现方法(必看)
2017/04/24 Javascript
vue-scroller记录滚动位置的示例代码
2018/01/17 Javascript
vue大型项目之分模块运行/打包的实现
2020/09/21 Javascript
Node.js利用Express实现用户注册登陆功能(推荐)
2020/10/26 Javascript
[48:48]2014 DOTA2国际邀请赛中国区预选赛 SPD-GAMING VS Dream TIME
2014/05/21 DOTA
Python实现多进程的四种方式
2019/02/22 Python
pandas 中对特征进行硬编码和onehot编码的实现
2019/12/20 Python
wxPython修改文本框颜色过程解析
2020/02/14 Python
基于Django OneToOneField和ForeignKey的区别详解
2020/03/30 Python
Python数据正态性检验实现过程
2020/04/18 Python
opencv 阈值分割的具体使用
2020/07/08 Python
HTML5 常见面试题之PC端和移动端区别介绍
2018/01/22 HTML / CSS
ProBikeKit新西兰:自行车套件,跑步和铁人三项装备
2017/04/05 全球购物
台湾租车首选品牌:IWS艾维士租车
2019/05/03 全球购物
香港中原电器网上商店:Chung Yuen
2019/06/26 全球购物
What is the purpose of Void class? Void类的作用是什么?
2016/10/31 面试题
最新个人职业生涯规划书
2014/01/22 职场文书
四年级下册教学反思
2014/02/01 职场文书
药学专业学生的自我评价分享
2014/02/06 职场文书
公关活动策划方案
2014/05/25 职场文书
团队拓展训练感想
2015/08/07 职场文书
基于Redis位图实现用户签到功能
2021/05/08 Redis
Sleuth+logback 设置traceid 及自定义信息方式
2021/07/26 Java/Android
为自由献出你的心脏!「进击的巨人展 FINAL」2022年6月在台开展
2022/04/13 日漫