python thrift 服务端与客户端使用

一、简介

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.安装

[[email protected] ~]# yum -y groupinstall "Development Tools"
[[email protected] ~]# yum -y install libevent-devel zlib-devel openssl-devel autoconf automake
[[email protected] ~]#  wget http://ftp.gnu.org/gnu/bison/bison-2.5.1.tar.gz 
[[email protected] ~]# tar xf bison-2.5.1.tar.gz
[[email protected] ~]# cd bison-2.5.1
[[email protected] ~]# ./configure --prefix=/usr
[[email protected] ~]# make
[[email protected] ~]# make install
[[email protected] ~]# tar xf thrift-0.9.2.tar.gz 
[[email protected] ~]# cd thrift-0.9.2
[[email protected] thrift-0.9.2]# ./configure -with-lua=no

3.安装python插件

pip install thrift

三、准备服务器端

1.编辑接口文件 helloworld.thrift:

service HelloWorld {
    string ping(),
    string say(1:string msg)
}

2.编辑 server.py

#!/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:亲测通过,吐槽一下,这东西以前都没有听说过,就要拿来开发,还要只是用客户端

时间: 2024-10-12 07:17:00

python thrift 服务端与客户端使用的相关文章

python模拟服务端和客户端通信(简单)

写了一个超级简单的,小白可以看一下,因为自己就是小白白(自学的) 客户端: import socket#指定一个协议tcp/ipclient=socket.socket()#连接一个地址(服务端和端口号)client.connect(('localhost',6969))#发送数据(python默认是byte类型,所以数据前面加b)client.send(b"Hello Word")#把服务端反馈的信息进行接收并赋值,给出一个接收的大小(kb/M)之类的date=client.recv

thrift服务端到客户端开发简单示例

(1)首先我们在服务器端写个helloworld.thrift文件,如下所示: service HelloWorld{ string ping(1: string name), string getpng(), } (2)在服务器端编译helloworld.thrift编译helloworld.thrift文件,会产生服务器端和客户端相应语言的接口源码./usr/local/thrift/bin/thrift -r --gen py helloworld.thrift /usr/local/th

socket服务端和客户端

#!/usr/bin/env python#encoding: utf-8import socketdef handle_request(client): buf = client.recv(1024) client.send("HTTP/1.1 200 OK\r\n\r\n") client.send("Hello, World") def main(): sock = socket.socket(socket.AF_INET, socket.SOCK_STREA

用http请求thrift服务端出现了内存溢出的情况

记一次内存溢出的分析经历 - Janti - 博客园 https://www.cnblogs.com/superfj/p/8474288.html 说在前面的话 朋友,你经历过部署好的服务突然内存溢出吗? 你经历过没有看过Java虚拟机,来解决内存溢出的痛苦吗? 你经历过一个BUG,百思不得其解,头发一根一根脱落的烦恼吗? 我知道,你有过! 但是我还是要来说说我的故事.................. 背景: 有一个项目做一个系统,分客户端和服务端,客户端用c++写的,用来收集信息然后传给服务

MySQL服务端读取客户端的漏洞

一个adminer如下 看到这个页面尝试弱口令登陆无果,想起了前段时间做的MySQL服务端读取客户端的漏洞poc: https://github.com/allyshka/Rogue-MySql-Server 在服务端监听后,使用adminer连接服务端 起初读/etc/passwd ,报错显示为opendir的关系,于是读取web文件, 于是读取 /data01/htdocs/m.php文件成功读取由于已经发现有config.php,于是读取config.php 发现mysql配置文件,得到m

WebSocket 实现服务端给客户端推送消息

目录 代码发布 应用场景 ajax 操作 队列 递归 如何实现服务端主动给客户端推送消息的效果 长轮询(兼容性好) websocker(主流浏览器都支持) 代码验证(了解) 代码发布 服务端主动给客户端推送消息 截至目前为止,我们所写的 web 项目基本都是基于 HTTP 协议的 HTTP 协议有四大特性:无链接 基于 HTTP 协议实现服务端主动给客户端推送消息好像有点麻烦--- 我们都经历过,浏览器打开一个网站不动,网站过一会儿自动弹出消息 再比如网页版本的微信和 qq,我们所有人创建一个群

关于ntp(时间同步协议)服务端和客户端的配置说明

本文主要写了一些在Linux(CentOS)服务器上配置ntp的经验,事件缘由来源于配置Zabbix监控ntp服务时的测试配置. NTP时间同步协议的服务端(ntpd服务)和客户端(ntpdate服)不能同时运行,即在运行ntpd服务后不能运行ntpdate服务,否则ntpdate服务会提示启动失败,而且日志中也会提示"the NTP socket is in use, exiting",如下图所示. 但客户端运行时,服务端可以运行,但服务端运行时,客户端不能运行,要运行客户端服务,就

用Java实现HTTP Multipart的服务端和客户端

今天简单介绍一下如何用Java支持HTTP Multipart的request和response. 整个项目的代码可以在https://github.com/mcai4gl2/multi下载. 在这个程序里,我们的业务场景很简单.在服务端有一个随机数生成器,可以生成随机的Integer和Guid,客户端通过服务,可以请求一个或多个随机数.同时,客户端可以向服务端发送一个或多个随机数,这些随机数会被加入到一个队列中,被其他的客户端通过请求获得.以下是我们的随机数Bean的定义: [java] vi

C# Socket服务端和客户端互相send和receive

服务端 1 using System; 2 using System.Collections.Generic; 3 using System.Text; 4 using System.Net.Sockets; 5 using System.Net; 6 using System.Threading; 7  8 namespace Controller 9 {10     public static class SocketServer11     {12         private stat