Thrift使用文件詳解(一步一步跟著做就可以)
Linux下使用Thrift詳細步驟
一、下載
下載 boost(c++靜態庫,必須),官方網址
下載thrift 0.8.0版本(由於版本較老官方沒有,可以自行下載)
下載thrift-0.8.0.exe (大部分是編譯產生,但是由於0.8.0版本無法產生有效的可行檔案,所以要下載使用,不過網上資源基本無法找到,我在所需檔案的包中給了一版)
下載libevent-2.0.22-stable(windows版本所需,Linux下不需要)
二、上傳
在Linux虛擬機器上建立目錄叫thrift,並將boost和thrfit壓縮檔案上傳(boost較大所需時間比較長)
三、修改資料夾中所有檔案的許可權
由於linux對檔案的許可權要求比較高,所以要將資料夾中的所有檔案許可權修改為可執行,在此推薦一款修改許可權的軟體WinSCP,這款軟體不僅能修改資料夾本身同時還能修改其子資料夾和檔案。
四、編譯boost
(所有安裝請不要指定目錄安裝,除非你能找到,否則會導致後邊無法安裝thrift,因為找不到路徑)
輸入 ./bootstrap.sh(如果不是將所有子檔案改為可執行時,此處可能導致無法通過)
再輸入 ./b2
最後執行 sudo ./b2 install
第一次圈出來的時未將全部檔案改為可讀可執行資料夾而導致結果
第二次圈出來的是正確結果
第三次是輸入./b2後的效果
五、編譯thrift
1) tar -xvf thrift-0.7.0.tar.gz 解壓縮檔案
2) cd thrift-0.7.0 進入Thrift安裝主目錄
3) ./configure (可能出現許可權不夠,可以根據boost方法修改資料夾許可權)
4) sudo make(此過程較慢)
5) sudo make install
然後再重新執行一次編譯,原因是thrfit所產生的標頭檔案和thrift檔案方便查詢,否則你在引入的時候不知道去哪找thrift相關的庫檔案和標頭檔案,因此建議再編譯一次並制定目錄,由於你制定了目錄,後期執行的時候又找不到執行命令會出現沒有thrift這個命令的問題,所以建議編譯兩次,第二次編譯程式碼從之前版本的第
./configure --prefix=/home/ngos/thrift/demo
所圈出的是thrift編譯時產生的資料夾。
(--prefix=/root/thrift/File為要制定的生成路徑,中間絕對不可以有空格)
六、製作.thrift檔案
在做完以上幾步之後再做.thrift檔案編譯才能產生正確的庫,如果沒有安裝boost會產生標頭檔案,但是不會產生依賴的庫檔案。
Demo.thrift檔案內容如下
struct stuData{
1:byte stuMemory,
2:i32 iLength,
}
service OptionalFun{
void SaveData(1: stuData user),
stuData GetData()
}
網上也給出一些相關案例,在這我具體解釋一下,因為這塊花費了我一些時間去查資料。結構體裡的內容可以寫成如下格式,
struct stuData{
1:required byte stuMemory,
2:required i32 iLength,
}
Required所代表的意義是必須新增此引數的賦值,如果在使用此結構體的時候此引數不復制是不正確的,把required換成optional則代表可選擇填入此引數資訊,如果不填入也可以。如果前面不加此識別符號,則預設是optional。
Service是你所要產生的介面,在編譯的時候thrift會自動產生相關介面,在你呼叫此介面時會自行傳送或接受你想要的資料。(由於前期研究較為淺薄,是否有client端介面還未驗證,如有需要請自行查閱資料。)
七、生成相應的庫檔案和標頭檔案
建立目錄,把demo.thrift檔案拷貝到該目錄下,並在命令列中輸入
thrift -r --gen cpp demo.thrift
所圈出的是產生的新產生的檔案,後邊是產生資料夾中的內容,其中
OptionalFun_server.skeleton.cpp的內容是伺服器程式,其中的內容可以按照自己需求更改。同時,我們拷貝一個Client.cpp到資料夾下修改,同時也更改OptionalFun_server.skeleton.cpp為OptionalFun_server.cpp,並進行內容上的修改。
把之前thrift產生的靜態庫和include檔案拷貝到gen-cpp中,為了方便直接將include下的thrift資料夾中的內容全部拷貝到當前目錄下,lib檔案直接拷貝過來便可。
然後輸入 make
再輸入 ./CppServer
再輸入 ./CppClient
OK,以上就是全部過程
Windows版本下使用Thrift詳細步驟
建議使用vs 2010
1、準備相關的檔案
將thrift-0.8.0.tar.gz 和libevent-2.0.22-stable.tar.gz和boost解壓到一個資料夾下。
2、編譯boost
1) 從開始選單啟動vs2010下的x64 win64 cmd視窗
2) 到BOOST下執行boostrap.bat生成相應版本的bjam
3) 輸入 bjam.exe --toolset=msvc-10.0 architecture=x86 address-model=64 link=static --build-type=complete --with-system --with-thread --with-date_time --with-filesystem --with-serialization
4) 輸入 b2 install --toolset=msvc-10.0 --stagedir="C:\Boost\boost_vc_100" threading=multi debug release
(根據本機電腦版本不同選擇不同的編譯視窗)
編譯好了把產生的lib和include拷貝到boost資料夾下。(編譯好的檔案在c盤boost目錄下)
2、準備環境
進入\thrift-0.8.0\lib\cpp,VS2010開啟Thrift.sln,有libthrift,libthriftnb兩個工程。
兩個工程的區別是,libthriftnb工程是非阻塞(non-blocking)模式的伺服器,非阻塞模式需要依賴libevent庫。
libthrift工程配置:
libthrift>屬性->C/C++->常規->附加包含目錄->\boost
libthrift>屬性->庫管理器->常規->附加庫目錄->\boost\lib
libthriftnb工程配置:
libthriftnb>屬性->C/C++->常規->附加包含目錄->
\boost
\libevent-2.0.21-stable
\libevent-2.0.21-stable\include
\libevent-2.0.21-stable\WIN32-Code
libthriftnb>屬性->庫管理器->常規->附加庫目錄->
\boost\lib
(根據名字不同選擇不同自己寫路徑) 編譯兩個工程。
3、建立工程
用Visual Studio 2010新建空程式。
將gen-cpp中的檔案和client客戶端檔案拷貝過來,目錄結構如下
其中標紅的是我自己寫的程式,最初應該不產生。
4、配置專案屬性
(由於windows版本只提供客戶端版本所以不提供程式碼)
Sever工程Server>屬性->C/C++->常規->附加包含目錄->\boost\boost_1_51
Sever工程Server>屬性->C/C++->常規->附加包含目錄->\thrift-0.9.1\lib\cpp\src
Sever工程Server>屬性->C/C++->常規->附加包含目錄->\thrift-0.9.1\lib\cpp\src\thrift
Sever工程Server>屬性->聯結器->附加庫目錄->\boost\boost_1_51\lib
Sever工程Server>屬性->聯結器->附加庫目錄->\thrift-0.9.1\lib\cpp\Debug
附加庫目錄指向的是剛剛編譯出的Debug目錄(或者release目錄)
類似的,Client工程也做這樣的配置。
Client工程Client>屬性->C/C++->常規->附加包含目錄->\boost\boost_1_51
Client工程Client>屬性->C/C++->常規->附加包含目錄->\thrift-0.9.1\lib\cpp\src
Client工程Client>屬性->C/C++->常規->附加包含目錄->\thrift-0.9.1\lib\cpp\src\thrift
Client工程Client>屬性->聯結器->附加庫目錄->\boost\boost_1_51\lib
Client工程Client>屬性->聯結器->附加庫目錄->\thrift-0.9.1\lib\cpp\Debug
至此以上windows端和linux端就介紹完全了!需要編寫程式碼請自己編寫吧。
Windows版本下使用Thrift0.9.2詳細步驟
由於thrift0.9.2用到了openssl庫,所以thrift 0.8.0版本的教程不適用此版本,所以重寫此版本的伺服器和客戶端方法。
由於opensll為開源庫,不同的電腦環境編譯結果可能不一樣,所以在此給出opensll1.0.1版本的靜態庫,省去編譯麻煩,同時給出了所需要的標頭檔案和原始檔。
Boost檔案編譯模式沒有改變,遵從thrift0.8.0版本即可。
Libthriftnb的配置方法也沒有改變,遵從上一版本即可。
Libthrift的配置如下:
附加包目錄下增加 \openssl-1.0.1h\inc32此資料夾,如下圖:
庫連結增加 openssl_lib資料夾中的兩個檔案,如下圖(由於檔案所在位置不一樣路徑不同):
然後編譯,則可正常通過,伺服器和客戶端所配環境和上一版本相同。