发布时间:2019-08-28 09:12:54编辑:auto阅读(2079)
转载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 syssys.path.append('./gen-py') from helloworld import HelloWorldfrom helloworld.ttypes import *from thrift.transport import TSocketfrom thrift.transport import TTransportfrom thrift.protocol import TBinaryProtocolfrom thrift.server import TServer import socketclass 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 syssys.path.append('./gen-py')from helloworld import HelloWorldfrom helloworld.ttypes import *from helloworld.constants import *from thrift import Thriftfrom thrift.transport import TSocketfrom thrift.transport import TTransportfrom thrift.protocol import TBinaryProtocoltry: # 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) |
运行结果:
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
上一篇: [开发]Python实现运维监控服务器硬
下一篇: python 读取并显示图片的两种方法
51316
50768
41362
38169
32651
29541
28386
23259
23229
21554
1629°
2363°
1966°
1910°
2239°
1947°
2640°
4425°
4266°
3037°