Linux下使用Thrift詳細步驟
一、下載
下載 boost(c++靜態庫,必須),官方網址
http://sourceforge.net/projects/boost/files/boost/1.58.0/
下載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這個命令的問題,所以建議編譯兩次,第二次編譯代碼從之前版本的第3步開始,並把之前的第3步改爲如下:
./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>屬性->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文件夾中的兩個文件,如下圖(由於文件所在位置不一樣路徑不同):
然後編譯,則可正常通過,服務器和客戶端所配環境和上一版本相同。