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实现正则匹配检索远端FTP目录下的文件
Mar 25 Python
Python 爬虫的工具列表大全
Jan 31 Python
详解python的ORM中Pony用法
Feb 09 Python
Python爬虫实现全国失信被执行人名单查询功能示例
May 03 Python
pandas 小数位数 精度的处理方法
Jun 09 Python
python实现图片转字符小工具
Apr 30 Python
python列表,字典,元组简单用法示例
Jul 11 Python
django 使用 PIL 压缩图片的例子
Aug 16 Python
使用Tensorflow实现可视化中间层和卷积层
Jan 24 Python
Python +Selenium解决图片验证码登录或注册问题(推荐)
Feb 09 Python
详解python定时简单爬取网页新闻存入数据库并发送邮件
Nov 27 Python
PyTorch梯度裁剪避免训练loss nan的操作
May 24 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
一个可以删除字符串中HTML标记的PHP函数
2006/10/09 PHP
php教程之phpize使用方法
2014/02/12 PHP
php导出excel格式数据问题
2014/03/11 PHP
PHP中读取照片exif信息的方法
2014/08/20 PHP
刷新PHP缓冲区为你的站点加速
2015/10/10 PHP
PHP实现类似于C语言的文件读取及解析功能
2017/09/01 PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
2017/11/14 PHP
javascript函数以及基础写法100多条实用整理
2013/01/13 Javascript
jQuery中ajax的使用与缓存问题的解决方法
2013/12/19 Javascript
JavaScript基于ajax编辑信息用法实例
2015/07/15 Javascript
jQuery基础_入门必看知识点
2016/07/04 Javascript
AngularJs ng-repeat 嵌套如何获取外层$index
2016/09/21 Javascript
js实现点击图片自动提交action的简单方法
2016/10/16 Javascript
基于jQuery实现弹幕APP
2017/02/10 Javascript
AngularJS发送异步Get/Post请求方法
2018/08/13 Javascript
jquery层次选择器的介绍
2019/01/18 jQuery
150行Node.js实现的dns代理工具
2019/08/02 Javascript
[02:28]DOTA2英雄基础教程 灰烬之灵
2013/12/19 DOTA
python的tkinter布局之简单的聊天窗口实现方法
2014/09/03 Python
浅述python中argsort()函数的实例用法
2017/03/30 Python
Python中defaultdict与lambda表达式用法实例小结
2018/04/09 Python
Python中的上下文管理器和with语句的使用
2018/04/17 Python
python调用xlsxwriter创建xlsx的方法
2018/05/03 Python
python写入文件自动换行问题的方法
2019/07/05 Python
python字符串的拼接方法总结
2019/11/18 Python
PyQT5 emit 和 connect的用法详解
2019/12/13 Python
python实现文字版扫雷
2020/04/24 Python
怎么快速自学python
2020/06/22 Python
CSS3动画animation实现云彩向左滚动
2014/05/09 HTML / CSS
波兰办公用品和学校用品在线商店:Dlabiura24.pl
2020/11/18 全球购物
在求职信中如何凸显个人优势
2013/10/30 职场文书
中学生国旗下讲话稿
2014/04/26 职场文书
说明书怎么写
2014/05/06 职场文书
常务副县长“三严三实”对照检查材料思想汇报
2014/10/05 职场文书
会计继续教育培训心得体会
2016/01/19 职场文书
angular异步验证器防抖实例详解
2022/03/31 Javascript