PHP Thrift是一個(gè)針對(duì)多語言進(jìn)行RPC通信的框架,借助PHP Thrift,您可以方便地使用PHP代碼來實(shí)現(xiàn)分布式系統(tǒng)。無論您使用構(gòu)造通信協(xié)議還是使用連通性庫,PHP Thrift都可以滿足您的需求。舉個(gè)例子,如果您使用兩份代碼來構(gòu)建應(yīng)用,且這兩份代碼使用的語言不同,PHP Thrift可以讓它們之間進(jìn)行通信。
PHP Thrift采用了一種叫做IDL (Interface Definition Language)的語言來定義通信協(xié)議。這個(gè)協(xié)議告訴Thrift在兩個(gè)平臺(tái)間如何交換信息。一旦您創(chuàng)建好這個(gè)IDL,您只需要運(yùn)行一個(gè)代碼生成器就可以生成用于不同語言的客戶端和服務(wù)器存根。
namespace tutorial
service Calculator {
i32 add(1:i32 num1, 2:i32 num2),
i32 subtract(1:i32 num1, 2:i32 num2),
i32 multiply(1:i32 num1, 2:i32 num2),
i32 divide(1:i32 num1, 2:i32 num2)
}
客戶端和服務(wù)器都需要執(zhí)行生成的代碼,生成的文件使用一個(gè)名為T的命名空間,例如,對(duì)于PHP文件該命名空間為T。
客戶端需要一個(gè)Transport和一個(gè)Protocol。這兩個(gè)對(duì)象會(huì)實(shí)例化一個(gè)Client。這個(gè)Client允許您簡(jiǎn)易地調(diào)用創(chuàng)建的服務(wù)。
$socket = new TSocket('localhost', 9090);
$transport = new TBufferedTransport($socket, 1024, 1024);
$protocol = new TBinaryProtocol($transport);
$client = new TServiceClient($protocol);
$transport->open();
$client->add(2, 5);
$transport->close();
服務(wù)器要?jiǎng)?chuàng)建一個(gè)普通的PHP服務(wù)器,并向該服務(wù)器注冊(cè)使用Thrift生成的代碼。
$handler = new CalculatorHandler();
$processor = new CalculatorProcessor($handler);
$transport = new TServerSocket('localhost', 9090);
$server = new TSimpleServer($processor, $transport);
$server->serve();
其中CalculatorHandler是服務(wù)實(shí)現(xiàn)代碼的部分,CalculatorProcessor是Thrift生成代碼中的處理器。
PHP Thrift為開發(fā)者帶來了一些強(qiáng)大的工具,使得開發(fā)人員可以輕松地創(chuàng)建分布式應(yīng)用程序。在與其他語言的開發(fā)人員合作時(shí),使用IDL可以促進(jìn)團(tuán)隊(duì)討論并消除語言間的差異。