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多线程抓取天涯帖子内容示例
Apr 03 Python
Python在Windows和在Linux下调用动态链接库的教程
Aug 18 Python
django 通过ajax完成邮箱用户注册、激活账号的方法
Apr 17 Python
Python 十六进制整数与ASCii编码字符串相互转换方法
Jul 09 Python
Python3.7实现中控考勤机自动连接
Aug 28 Python
Python lambda表达式用法实例分析
Dec 25 Python
如何使用python代码操作git代码
Feb 29 Python
Python第三方包之DingDingBot钉钉机器人
Apr 09 Python
Python读入mnist二进制图像文件并显示实例
Apr 24 Python
Keras设置以及获取权重的实现
Jun 19 Python
python 基于PYMYSQL使用MYSQL数据库
Dec 24 Python
基于python实现银行管理系统
Apr 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实现事件监听与触发的方法
2014/11/21 PHP
PHP批量修改文件名称的方法分析
2017/02/27 PHP
面向对象的Javascript之一(初识Javascript)
2012/01/20 Javascript
jquery animate实现鼠标放上去显示离开隐藏效果
2013/07/21 Javascript
js实现目录定位正文示例
2013/11/14 Javascript
显示今天的日期js代码(阳历和农历)
2014/09/30 Javascript
jquery操作 iframe的方法
2014/12/03 Javascript
jQuery通过控制节点实现仅在前台通过get方法完成参数传递
2015/02/02 Javascript
CascadeView级联组件实现思路详解(分离思想和单链表)
2016/04/12 Javascript
jQuery实现6位数字密码输入框
2016/12/29 Javascript
微信小程序图片宽100%显示并且不变形
2017/06/21 Javascript
详解在React中跨组件分发状态的三种方法
2018/08/09 Javascript
vue项目打包后上传至GitHub并实现github-pages的预览
2019/05/06 Javascript
解决vue自定义全局消息框组件问题
2019/11/22 Javascript
JS数组方法shift()、unshift()用法实例分析
2020/01/18 Javascript
js实现拾色器插件(ColorPicker)
2020/05/21 Javascript
如何在vue中使用HTML 5 拖放API
2021/01/14 Vue.js
python实现定制交互式命令行的方法
2014/07/03 Python
python实现应用程序在右键菜单中添加打开方式功能
2017/01/09 Python
Python自动化开发学习之三级菜单制作
2017/07/14 Python
Python3调用微信企业号API发送文本消息代码示例
2017/11/10 Python
python删除某个字符
2018/03/19 Python
用Python和WordCloud绘制词云的实现方法(内附让字体清晰的秘笈)
2019/01/08 Python
pytorch的梯度计算以及backward方法详解
2020/01/10 Python
Pytorch模型转onnx模型实例
2020/01/15 Python
vscode调试django项目的方法
2020/08/06 Python
python文件排序的方法总结
2020/09/13 Python
自主实习接收函
2014/01/13 职场文书
经典婚礼主持词
2014/03/13 职场文书
房屋租赁协议书
2014/04/10 职场文书
大学生精神文明先进个人事迹材料
2014/05/02 职场文书
组织鉴定材料
2014/06/02 职场文书
企业精神口号
2014/06/11 职场文书
2014年调度员工作总结
2014/11/19 职场文书
浅析python中特殊文件和特殊函数
2022/02/24 Python
python​格式化字符串
2022/04/20 Python