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定时器使用示例分享
Feb 16 Python
python实现博客文章爬虫示例
Feb 26 Python
Python合并多个装饰器小技巧
Apr 28 Python
详解Python中的日志模块logging
Jun 19 Python
Python制作刷网页流量工具
Apr 23 Python
详解Python3操作Mongodb简明易懂教程
May 25 Python
Python基于matplotlib实现绘制三维图形功能示例
Jan 18 Python
python根据时间获取周数代码实例
Sep 30 Python
python词云库wordcloud的使用方法与实例详解
Feb 17 Python
使用PyQt的QLabel组件实现选定目标框功能的方法示例
May 19 Python
如何利用Python识别图片中的文字
May 31 Python
Python爬虫爬取糗事百科段子实例分享
Jul 31 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
QueryPath PHP 中的jQuery
2010/04/11 PHP
浅谈PHP中foreach/in_array的使用
2015/11/02 PHP
php实现网页端验证码功能
2017/07/11 PHP
JavaScript 继承详解(一)
2009/07/13 Javascript
在Javascript中 声明时用"var"与不用"var"的区别
2013/04/15 Javascript
js图片自动轮播代码分享(js图片轮播)
2014/05/06 Javascript
jquery 获取select数组与name数组长度的实现代码
2016/06/20 Javascript
Bootstrap和Angularjs配合自制弹框的实例代码
2016/08/24 Javascript
JS获取鼠标相对位置的方法
2016/09/20 Javascript
详解Javascript数据类型的转换规则
2016/12/12 Javascript
angular ng-repeat数组中的数组实例
2017/02/18 Javascript
详解通过JSON数据使用VUE.JS
2017/05/26 Javascript
jQuery中ajax获取数据赋值给页面的实例
2017/12/31 jQuery
Vue+Jwt+SpringBoot+Ldap完成登录认证的示例代码
2018/05/21 Javascript
微信小程序wx.navigateTo中events属性实现页面间通信传值,数据同步
2019/07/13 Javascript
Node使用Selenium进行前端自动化操作的代码实现
2019/10/10 Javascript
vue swipeCell滑动单元格(仿微信)的实现示例
2020/09/14 Javascript
[56:17]NB vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第三场 8.22
2019/09/05 DOTA
python操作MySQL数据库的方法分享
2012/05/29 Python
wxpython中利用线程防止假死的实现方法
2014/08/11 Python
使用Python脚本和ADB命令实现卸载App
2017/02/10 Python
python 生成器生成杨辉三角的方法(必看)
2017/04/10 Python
Python/ArcPy遍历指定目录中的MDB文件方法
2018/10/27 Python
使用TensorFlow实现二分类的方法示例
2019/02/05 Python
Python高级编程之消息队列(Queue)与进程池(Pool)实例详解
2019/11/01 Python
CSS3 @font-face属性使用指南
2014/12/12 HTML / CSS
高三自我鉴定
2013/10/23 职场文书
工厂门卫岗位职责
2013/11/25 职场文书
酒店实习个人鉴定
2013/12/07 职场文书
《乌塔》教学反思
2014/02/17 职场文书
酒鬼酒广告词
2014/03/21 职场文书
职业生涯规划书结束语
2014/04/15 职场文书
审计专业自荐信范文
2014/04/21 职场文书
2015年大学生社会实践评语
2015/03/26 职场文书
七年级之家长会发言稿范文
2019/09/04 职场文书
使用pipenv管理python虚拟环境的全过程
2021/09/25 Python