Apache Thrift 是 Facebook 實作的一種高效的、支援多種程式設計語言的RPC(遠端服務調用)架構。
本文主要目的是分别介紹在Windows及Linux平台下的Thrift安裝步驟,以及實作一個簡單的demo示範Thrift的使用方法。更多Thrift原理留在以後再行介紹。
boost
boost的編譯就不再這裡介紹了,我分别使用了boost1.55或boost1.49編譯通過;
libevent
按需編譯,如果不需要異步server就可以不編譯libevent,否則可以點此下載下傳libevent-2.0.21-stable;
openssl
我是在Windows7 64bit, VS2010編譯的。 Windows下編譯倒也不麻煩,簡單介紹如下:
解壓縮源代碼,進入到lib\cpp目錄下,打開Thrift.sln,裡面有libthrift和libthriftnb兩個工程,其中libthrift工程是正常的阻塞型server端(單線程server,一個連接配接一個線程server,線程池server),libthriftnb工程是非阻塞(non-blocking)模式的服務server端,也隻有編譯libthriftnb時才需要依賴libevent庫,否則可以不編譯libevent庫;
設定依賴庫頭檔案和庫檔案,這就不再介紹了;
編譯,順利的話就OK了,會在lib\cpp\Debug目錄下生成libthrift.lib和libthriftnb.lib(如果編譯的話);
将compiler\cpp\src\windows\version.h.in檔案拷貝到compiler\cpp\src\目錄下,并重命名為version.h;
到compiler\cpp目錄下,打開compiler.sln,編譯即可
我是在Centos6.4 64bit,g++ 4.4.7編譯的,編譯很簡單,分别可以使用cmake或者make工具進行編譯,這裡不再多做介紹,當然,編譯過程中缺少了某些庫什麼的,就先按照即可,更詳細的步驟請看本文的參考文章連結。
寫一個.thrift檔案,也就是IDL(Interface Description File,接口描述檔案);
server端程式引入第2步生成的代碼,實作RPC業務代碼;
client端程式引入第2步生成的代碼,實作RPC調用邏輯;
用第4步生成的程式就可以調用第3步實作的遠端服務了;
下面就示範一個簡單的server端和client端程式。
假設實作這麼一個簡單服務,client通過hello接口發送自己的名字,且需要server端回複,比如 hello.thrift:
執行thirift指令生成源檔案:
以上指令表示生成C++語言的源代碼,然後會生成一個gen-cpp目錄,裡面包含自動生成的幾個源代碼檔案:
HelloService_server.skeleton.cpp就是預設的server端程式入口,可以直接修改該檔案,或者拷貝一份再做修改(我是拷貝并重命名為server.cpp),以便增加自己的邏輯處理:
如果是在linux平台下,直接通過g++編譯:
如果是在Windows平台下,通過vs2010建立win32控制台工程,将gen-cpp目錄下的所有檔案複制到新工程下,設定頭檔案包含和lib庫目錄。 比如設定libthrift.lib的頭檔案目錄為thrift-0.9.3\lib\cpp\src\thrift,lib庫目錄為thrift-0.9.3\lib\cpp\Debug。
因為沒有預設的client實作,是以需要建立一個client.cpp檔案,自己增加實作:
如果是在Windows平台下,通過vs2010建立win32控制台工程,将gen-cpp目錄下的所有檔案(除HelloService_server.skeleton.cpp之外)複制到新工程下,并增加上面手動實作的client.cpp。
通過以上步驟,就實作一個簡單的RPC server和client程式了,可以分别運作進行測試看看效果怎麼樣。
<a href="http://blog.csdn.net/qq910894904/article/details/41132779">Thrift官方安裝手冊(譯)</a>