Python使用Thrift的代碼分析


前言

  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()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM