Tuesday, July 13, 2010
Thrift Server-Client in Python
1. Write Thrift stub code
[tkang@neb005 thrift]$ vi helloworld.thrift
1 2 3 4 5 6 7 8 9 10 11 | const string HELLO_IN_KOREAN = "an-nyoung-ha-se-yo" const string HELLO_IN_FRENCH = "bonjour!" const string HELLO_IN_JAPANESE = "konichiwa!" service HelloWorld { void ping(), i32 sayHello(), i32 sayMsg(1: string msg) } |
2. Generate python code
[tkang@neb005 thrift]$ thrift --gen py helloworld.thrift
Generated codes will be saved under "gen-py" directory.
[tkang@neb005 thrift]$ ls
gen-py helloworld.thrift
3. Fill in Server code
[tkang@neb005 thrift]$ mkdir py-impl
[tkang@neb005 thrift]$ cd py-impl
[tkang@neb005 py-impl]$ vi 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 40 41 42 43 | #!/usr/bin/env python 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( 30303 ) tfactory = TTransport.TBufferedTransportFactory() pfactory = TBinaryProtocol.TBinaryProtocolFactory() server = TServer.TSimpleServer(processor, transport, tfactory, pfactory) print "Starting python server..." server.serve() print "done!" |
4. Write Client code to connect to server
[tkang@neb005 py-impl]$ vi 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 41 42 43 44 | #!/usr/bin/env python 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( 'localhost' , 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_IN_KOREAN) print msg transport.close() except Thrift.TException, tx: print "%s" % (tx.message) |
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· ThreeJs-16智慧城市项目(重磅以及未来发展ai)
· .NET 原生驾驭 AI 新基建实战系列(一):向量数据库的应用与畅想
· Ai满嘴顺口溜,想考研?浪费我几个小时
· Browser-use 详细介绍&使用文档
· 软件产品开发中常见的10个问题及处理方法
2011-11-20 Linux环境下段错误的产生原因及调试方法小结
2011-11-20 人工翻译
2011-11-20 webkit and the browser
2010-11-20 系统抢救10.04