Python Thriftの例
前言
Appche Thriftは、Facebookが実現する効率的で、複数のプログラミング言語をサポートする遠隔サービス呼び出しの枠組みです.本稿ではPython開発者の立場から、Appche Thriftの構造、開発、使用を簡単に紹介します.
Thrift概要
Thrift network stack
Transport
IDLファイル
本論文は単なる例であり、実際のプロジェクトでは、一般的に、zookeeperに基づいてサービスのthrift状態を登録し管理し、serverとclientをさらにパッケージ化し、プロジェクトの各モジュールで起動するのに便利である.
参照 Python thrift使用例 https://thrift.apache.org/docs/concepts
Appche Thriftは、Facebookが実現する効率的で、複数のプログラミング言語をサポートする遠隔サービス呼び出しの枠組みです.本稿ではPython開発者の立場から、Appche Thriftの構造、開発、使用を簡単に紹介します.
Thrift概要
Thrift network stack
Transport
Transport (socket,http ) , thrift 。
Transport :open, close, read, write, flush, isOpen, readAll。
Server ServerTransport( socket ), , :listen, accept, close。
python Transport :TSocket, THttpServer, TSSLSocket, TTwisted, TZlibTransport, 。 , Transport ,TBufferedTransport( ) TFramedTransport( )。
server , Tranport , Factory :TTransportFactoryBase( , ),TBufferedTransportFactory( Transport) TFramedTransportFactory( Transport)。
ProtocolProtocol , rpc 。
TProtocol :TJSONProtocol,TSimpleJSONProtocol,TBinaryProtocol,TBinaryPotocolAccelerated,TCompactProtocol。
プロcessorProcessor stream , handler service。 Processor compiler , service 。
ServerServer Transport, 、 Protocol, service handler, client processor 。
TServer , :
1) processor, serverTransport
2) processor, serverTransport, transportFactory, protocolFactory
3) processor, serverTransport, inputTransportFactory, outputTransportFactory, inputProtocolFactory, outputProtocolFactory
TServer 3) ,1) 2) 。
TServer :TSimpleServer, TThreadedServer, TThreadPoolServer, TForkingServer, THttpServer, TNonblockingServer, TProcessPoolServer
TServer serve , client 。
コードゲナートconstants.py:
ttypes.py: struct,
SERVICE_NAME.py: service , :
Iface: service
Client: client rpc
使い方Thrift , IDL, service handler( 、 ), 。 :Transport( socket, buffed framed factory),Protocol,Server。
例IDLファイル
/*
thrift
*/
service HelloService {
string say(1:string msg)
}
定義ファイルを編集した後、次のコマンドを実行して、thriftファイルを作成します.ハローディレクトリを現在のディレクトリに移すことができます.後から呼び出しやすくなります.thrift -r -gen py hello.thrift
server# coding: utf-8
"""
thrift_client.py
"""
import socket
import sys
from hello import HelloService
from hello.ttypes import *
from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol
from thrift.server import TServer
class HelloServiceHandler:
def say(self, msg):
ret = "Received: " + msg
print ret
return ret
handler = HelloServiceHandler()
processor = HelloService.Processor(handler)
transport = TSocket.TServerSocket("localhost", 9090)
tfactory = TTransport.TBufferedTransportFactory()
pfactory = TBinaryProtocol.TBinaryProtocolFactory()
server = TServer.TSimpleServer(processor, transport, tfactory, pfactory)
print "Starting thrift server in python..."
server.serve()
print "done!"
client# coding: utf-8
"""
thrift_client.py
"""
import sys
from hello import HelloService
from thrift import Thrift
from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol
try:
transport = TSocket.TSocket('localhost', 9090)
transport = TTransport.TBufferedTransport(transport)
protocol = TBinaryProtocol.TBinaryProtocol(transport)
client = HelloService.Client(protocol)
transport.open()
print "client - say"
msg = client.say("Hello!")
print "server - " + msg
transport.close()
except Thrift.TException, ex:
print "%s" % (ex.message)
実行結果$ ptyhon thrift_client.py
client - say
server - Received: Hello!
$ python thrift_server.py
Starting thrift server in python...
Received: Hello!
結び目本論文は単なる例であり、実際のプロジェクトでは、一般的に、zookeeperに基づいてサービスのthrift状態を登録し管理し、serverとclientをさらにパッケージ化し、プロジェクトの各モジュールで起動するのに便利である.
参照