thrift的使用--python
转载blog:http://www.cnblogs.com/pinking/p/7726478.html
在这里要补充一点的就是在
在这里python要安装thrift包时候,可以直接在安装好的thrift好的模块中sudo python setup.py install安装就可以,
java、c++的我暂时没走通,周末来摸索
以下原文,作者在Windows上面,我在linux上面:
1、下载thrift,下载地址:http://archive.apache.org/dist/thrift/0.9.3/
2、在编写python的thrift代码时,需要先安装thrift module,下载路径:https://pypi.python.org/pypi/thrift/0.9.1
3、安装thrift:
tar -zvxf thrift-0.9.3.tar.gz 直接下一步。。。
:在命令行中输入:
y]$ thrift --version
Thrift version 0.9.3
即可以看到安装后的版本信息。
4、thrift 采用IDL(Interface Definition Language)来定义通用的服务接口,并通过生成不同的语言代理实现来达到跨语言、平台的功能。在thrift的IDL中可以定义以下一些类型:基本数据类型,结构体,容器,异常、服务。
thrift脚本helloworld.thrift:
const string HELLO_YK = "yk"
service HelloWorld {
void ping(),
string sayHello(),
string sayMsg(1:string msg)
}
thrift脚本通过Thrift编辑器生成所要求的python开发语言代码。即:
thrift -r --gen py helloworld.thrift
5、Thrift是一个典型的CS结构,客户端和服务端可以使用不同的语言开发。本文以python为例:
PythonServer.py:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | 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 import socket class HelloWorldHandler: def __init__( self ): self .log = {} def ping( self ): print "ping()" def sayHello( self ): print "sayHello()" return "say hello from " + socket.gethostbyname(socket.gethostname()) def sayMsg( self , msg): print "sayMsg(" + msg + ")" return "say " + msg + " from " + socket.gethostbyname(socket.gethostname()) handler = HelloWorldHandler() processor = HelloWorld.Processor(handler) transport = TSocket.TServerSocket( '127.0.0.1' , 30303 ) tfactory = TTransport.TBufferedTransportFactory() pfactory = TBinaryProtocol.TBinaryProtocolFactory() server = TServer.TSimpleServer(processor, transport, tfactory, pfactory) print "Starting python server..." server.serve() print "done!" |
PythonClient.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | import sys sys.path.append( './gen-py' ) from helloworld import HelloWorld from helloworld.ttypes import * from helloworld.constants import * from thrift import Thrift from thrift.transport import TSocket from thrift.transport import TTransport from thrift.protocol import TBinaryProtocol try : # Make socket transport = TSocket.TSocket( '127.0.0.1' , 30303 ) # Buffering is critical. Raw sockets are very slow transport = TTransport.TBufferedTransport(transport) # Wrap in a protocol protocol = TBinaryProtocol.TBinaryProtocol(transport) # Create a client to use the protocol encoder client = HelloWorld.Client(protocol) # Connect! transport. open () client.ping() print "ping()" msg = client.sayHello() print msg msg = client.sayMsg(HELLO_YK) print msg transport.close() except Thrift.TException, tx: print "%s" % (tx.message) |
运行结果:
server端:
python PythonServer.py
Starting python server...
ping()
client端:
python PythonClient.py
ping()
say hello from 10.101.173.116
say yk from 10.101.173.116
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341