前言
python使用方便,非常易用,第三方庫的支持很全面,使用Python開發Thrift程序的步驟也相當簡單,首需要需要配置Python及Thrift環境,然后根據thrift文件,由thrift模板生成器自動生成通信接口代碼,具體的操作可以參考:http://www.cnblogs.com/jishilei/archive/2012/12/24/2830944.html
python開發thrift,肯定會涉及到server和client,分別來看下:
Server端
Server段需要實現Thrift里面的service方法,也就是自動生成代碼中的Iface接口程序
thrift文件中的service方法如下:
service Calculator extends shared.SharedService { void ping(), i32 add(1:i32 num1, 2:i32 num2), i32 calculate(1:i32 logid, 2:Work w) throws (1:InvalidOperation ouch), oneway void zip() }
Iface接口(位於gen-py/tutorial/Calculator.py)如下:
class Iface(shared.SharedService.Iface): def ping(self, ): pass def add(self, num1, num2): pass def calculate(self, logid, w): pass def zip(self, ): pass
服務器端首先需要實現Iface接口,然后分別構造Thrift通信所必需的processor、Transport、BufferedTransportFactory、BinaryProtocolFactory等對象,然后構建server對象並啟動serve()方法,具體實現代碼如下:
handler = CalculatorHandler() processor = Calculator.Processor(handler) transport = TSocket.TServerSocket('localhost',port=9090) tfactory = TTransport.TBufferedTransportFactory() pfactory = TBinaryProtocol.TBinaryProtocolFactory() server = TServer.TSimpleServer(processor, transport, tfactory, pfactory) print 'Starting the server...' server.serve()
如果有需要,你可以構建一個多線程的server程序,具體實現代碼可以參考:
server = TServer.TThreadedServer(processor, transport, tfactory, pfactory)
#或者:
server = TServer.TThreadPoolServer(processor, transport, tfactory, pfactory)
Client端
客戶端使用Thrift服務的步驟為:創建一個socket對象,將socket對象封裝為BinaryProtocol,然后通過BinaryProtocol反序列化編碼創建代理客戶端,有了client以后及可以執行各種Iface接口方法,具體代碼如下:
transport = TSocket.TSocket('localhost',9090) #為了提高性能,使用Buffer封裝原生的socket連接 transport = TTransport.TBufferedTransport(transport) protocol = TBinaryProtocol.TBinaryProtocol(transport) client = Calculator.Client(protocol) transport.open() #TODO transport.close()