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实现基于HTTP文件传输实例
Nov 08 Python
python实现按行切分文本文件的方法
Apr 18 Python
对numpy Array [: ,] 的取值方法详解
Jul 02 Python
NumPy 数学函数及代数运算的实现代码
Jul 18 Python
Python3 获取一大段文本之间两个关键字之间的内容方法
Oct 11 Python
详解Python进阶之切片的误区与高级用法
Dec 24 Python
python 返回一个列表中第二大的数方法
Jul 09 Python
浅析Python 引号、注释、字符串
Jul 25 Python
django框架模型层功能、组成与用法分析
Jul 30 Python
基于django 的orm中非主键自增的实现方式
May 18 Python
Django中Q查询及Q()对象 F查询及F()对象用法
Jul 09 Python
Python中BeautifulSoup通过查找Id获取元素信息
Dec 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
用Socket发送电子邮件(利用需要验证的SMTP服务器)
2006/10/09 PHP
消息持续发送的完整例子
2006/10/09 PHP
PHP判断文件是否存在、是否可读、目录是否存在的代码
2012/10/03 PHP
php微信公众号开发之微信企业付款给个人
2018/10/04 PHP
PHP数组Key强制类型转换实现原理解析
2020/09/01 PHP
JavaScript实际应用:innerHTMl和确认提示的使用
2006/06/22 Javascript
百度 popup.js 完美修正版非常的不错 脚本之家推荐
2009/04/17 Javascript
工作需要写的一个js拖拽组件
2011/07/28 Javascript
IE6、IE7中获取Button元素的值的bug说明
2011/08/28 Javascript
JavaScript模版引擎的基本实现方法浅析
2016/02/15 Javascript
解析NodeJs的调试方法
2016/12/11 NodeJs
整理关于Bootstrap表单的慕课笔记
2017/03/29 Javascript
vue 项目接口管理的实现
2019/01/17 Javascript
优化Vue中date format的性能详解
2020/01/13 Javascript
node事件循环和process模块实例分析
2020/02/14 Javascript
[02:37]TI8勇士令状不朽珍藏II视频展示
2018/06/23 DOTA
python使用正则搜索字符串或文件中的浮点数代码实例
2014/07/11 Python
在Python中操作字符串之startswith()方法的使用
2015/05/20 Python
Django 前后台的数据传递的方法
2017/08/08 Python
python利用lxml读写xml格式的文件
2017/08/10 Python
浅谈python写入大量文件的问题
2018/11/09 Python
不到20行代码用Python做一个智能聊天机器人
2019/04/19 Python
使用python来调用CAN通讯的DLL实现方法
2019/07/03 Python
Python 通过截图匹配原图中的位置(opencv)实例
2019/08/27 Python
python字符串的拼接方法总结
2019/11/18 Python
Python 解码Base64 得到码流格式文本实例
2020/01/09 Python
如何快速理解python的垃圾回收机制
2020/09/01 Python
python 实现socket服务端并发的四种方式
2020/12/14 Python
int *p=NULL和*p= NULL有什么区别
2014/10/23 面试题
社团活动总结书
2014/06/27 职场文书
2014年入党积极分子学习三中全会思想汇报
2014/09/13 职场文书
清洁工岗位职责
2015/02/13 职场文书
档案工作个人总结
2015/03/03 职场文书
Golang 并发下的问题定位及解决方案
2022/03/16 Golang
Redis 哨兵机制及配置实现
2022/03/25 Redis
Win11运行育碧游戏总是崩溃怎么办 win11玩育碧游戏出现性能崩溃的解决办法
2022/04/06 数码科技