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语言中的按位运算符
Nov 26 Python
Python计算回文数的方法
Mar 11 Python
python关键字and和or用法实例
May 28 Python
浅谈django model的get和filter方法的区别(必看篇)
May 23 Python
利用python获取Ping结果示例代码
Jul 06 Python
python实现生命游戏的示例代码(Game of Life)
Jan 24 Python
Python实现将通信达.day文件读取为DataFrame
Dec 22 Python
python pygame实现方向键控制小球
May 17 Python
pycharm中显示CSS提示的知识点总结
Jul 29 Python
Django中reverse反转并且传递参数的方法
Aug 06 Python
Python字符串处理的8招秘籍(小结)
Aug 13 Python
Python修改列表值问题解决方案
Mar 06 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 水平的题目
2007/05/30 PHP
PHP中英混合字符串截取函数代码
2011/07/17 PHP
PHP语法小结之基础和变量
2015/11/22 PHP
PHP 年月日的三级联动实例代码
2017/05/24 PHP
PHP小程序支付功能完整版【基于thinkPHP】
2019/03/26 PHP
PHP+swoole+linux实现系统监控和性能优化操作示例
2019/04/15 PHP
11款新鲜的jQuery插件[附所有demo下载]
2011/01/24 Javascript
node.js超时timeout详解
2014/11/26 Javascript
JavaScript数组去重的3种方法和代码实例
2015/07/01 Javascript
json对象转为字符串,当做参数传递时加密解密的实现方法
2016/06/29 Javascript
js内置对象处理_打印学生成绩单的简单实现
2016/09/24 Javascript
js获取腾讯视频ID的方法
2016/10/03 Javascript
jQuery Validate验证表单时多个name相同的元素只验证第一个的解决方法
2016/12/24 Javascript
解决webpack -p压缩打包react报语法错误的方法
2017/07/03 Javascript
Angular父子组件通过服务传参的示例方法
2018/10/31 Javascript
利用es6 new.target来对模拟抽象类的方法
2019/05/10 Javascript
vue学习笔记之作用域插槽实例分析
2020/02/01 Javascript
python进阶教程之文本文件的读取和写入
2014/08/29 Python
Python兔子毒药问题实例分析
2015/03/05 Python
Python实现windows下模拟按键和鼠标点击的方法
2015/03/13 Python
利用Python为iOS10生成图标和截屏
2016/09/24 Python
python 多线程重启方法
2019/02/18 Python
用python实现英文字母和相应序数转换的方法
2019/09/18 Python
python socket 聊天室实例代码详解
2019/11/14 Python
Tensorflow 自定义loss的情况下初始化部分变量方式
2020/01/06 Python
pytorch程序异常后删除占用的显存操作
2020/01/13 Python
你应该知道的30个css选择器
2014/03/19 HTML / CSS
canvas实现圆形进度条动画的示例代码
2017/12/26 HTML / CSS
Desigual美国官方网站:西班牙服装品牌
2019/03/29 全球购物
餐饮加盟计划书
2014/01/10 职场文书
团员个人年度总结
2015/02/26 职场文书
python 判断文件或文件夹是否存在
2022/03/18 Python
Python采集爬取京东商品信息和评论并存入MySQL
2022/04/12 Python
Golang 切片(Slice)实现增删改查
2022/04/22 Golang
python使用pycharm安装pyqt5以及相关配置
2022/04/22 Python
python和Appium的移动端多设备自动化测试框架
2022/04/26 Python