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模块restful使用方法实例
Dec 10 Python
Python求两个list的差集、交集与并集的方法
Nov 01 Python
对Python新手编程过程中如何规避一些常见问题的建议
Apr 01 Python
Python基于select实现的socket服务器
Apr 13 Python
Python中创建字典的几种方法总结(推荐)
Apr 27 Python
十分钟利用Python制作属于你自己的个性logo
May 07 Python
pandas Dataframe行列读取的实例
Jun 08 Python
Python进阶:生成器 懒人版本的迭代器详解
Jun 29 Python
Python爬虫 scrapy框架爬取某招聘网存入mongodb解析
Jul 31 Python
python正则过滤字母、中文、数字及特殊字符方法详解
Feb 11 Python
Python 定义只读属性的实现方式
Mar 05 Python
解决Pycharm双击图标启动不了的问题(JetBrains全家桶通用)
Aug 07 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中通过curl模拟登陆discuz论坛的实现代码
2012/02/16 PHP
PHP基础陷阱题(变量赋值)
2012/09/12 PHP
php图片添加文字水印实现代码
2016/03/15 PHP
php检查函数必传参数是否存在的实例详解
2017/08/28 PHP
PHP实现的链式队列结构示例
2017/09/15 PHP
PHP7中I/O模型内核剖析详解
2019/04/14 PHP
javascript中onclick(this)用法介绍
2013/04/19 Javascript
jquery 操作css样式、位置、尺寸方法汇总
2014/11/28 Javascript
JavaScript中switch语句的用法详解
2015/06/03 Javascript
理解和运用JavaScript的闭包机制
2015/08/13 Javascript
js操作table元素实现表格行列新增、删除技巧总结
2015/11/18 Javascript
理解javascript异步编程
2016/01/27 Javascript
瀑布流的实现方式(原生js+jquery+css3)
2020/06/28 Javascript
JS运动改变单物体透明度的方法分析
2018/01/23 Javascript
javascript数组去重方法总结(推荐)
2019/03/20 Javascript
jquery制作的移动端购物车效果完整示例
2020/02/24 jQuery
three.js显示中文字体与tween应用详析
2021/01/04 Javascript
[07:26]2015国际邀请赛第二日TOP10集锦
2015/08/06 DOTA
[46:40]VGJ.T vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
跟老齐学Python之画圈还不简单吗?
2014/09/20 Python
Python中的日期时间处理详解
2016/11/17 Python
Python实现多线程HTTP下载器示例
2017/02/11 Python
浅谈Python中带_的变量或函数命名
2017/12/04 Python
python将字符串以utf-8格式保存在txt文件中的方法
2018/10/30 Python
在Python中os.fork()产生子进程的例子
2019/08/08 Python
python应用Axes3D绘图(批量梯度下降算法)
2020/03/25 Python
python 使用raw socket进行TCP SYN扫描实例
2020/05/05 Python
python判断元素是否存在的实例方法
2020/09/24 Python
Python通过递归函数输出嵌套列表元素
2020/10/15 Python
美国领先的精品家居照明和装饰产品在线零售商:LightsOnline.com
2018/01/23 全球购物
我的理想演讲稿
2014/04/30 职场文书
干部作风建设工作总结
2014/10/29 职场文书
2014年学生会主席工作总结
2014/11/07 职场文书
环保宣传语大全
2015/07/13 职场文书
Go语言的协程上下文的几个方法和用法
2022/04/11 Golang
MySQL 自动填充 create_time 和 update_time
2022/05/20 MySQL