亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

編譯thrift和使用 - 翱翔云顛的博客 - 我的搜狐

系統(tǒng) 2076 0

編譯thrift和使用 - 翱翔云顛的博客 - 我的搜狐

編譯thrift和使用

我使用的版本是thrift-0.6.1
解壓以后,先看readme,其中說編譯環(huán)境參考http://wiki.apache.org/thrift/ThriftRequirements,打開看:

Language requirements

  • C++
    • Boost 1.33.1+
    • libevent (optional, to build the nonblocking server)
    • zlib (optional)
  • Java
    • Java 1.5+
    • Apache Ant
    • Apache Ivy (recommended)
    • Apache Commons Lang (recommended)
    • SLF4J
  • C#: Mono 1.2.4+ (and pkg-config to detect it) or Visual Studio 2005+
  • Python 2.4+ (including header files for extension modules)
  • PHP 5.0+ (optionally including header files for extension modules)
  • Ruby 1.8+ (including header files for extension modules)
  • Erlang R12 (R11 works but not recommended)
  • Perl 5
    • Bit::Vector
    • Class::Accessor
以C++為例,先安裝Boost和libevent,zlib是一個(gè)支持壓縮的,以后再說,按照網(wǎng)站的指示安裝就可以了,

我編譯thrift使用的是:
          ./configure --prefix=/usr/local/ --disable-static --with-libevent=/usr/local
          
沒有加--with-boost=/usr/local,因?yàn)槲野裝oost放在/usr/include下了,所以能夠找到

因?yàn)槲夜痉?wù)器是RHEL4,版本相對(duì)較老,所以出現(xiàn)了很多問題:
-。找不到BOOST
因我我早先已經(jīng)在其它地方安裝了boost,所以
#ln -s <我的boost root path>/boost /usr/include/boost

二。undefined reference to `_Unwind_Resume'
因?yàn)榫幾g器較老,所以需要加上-Wl,-Bdynamic -lgcc_s 這個(gè)參數(shù)就可以了,一開始我只是在thrift的根目錄的Makefile文件中的相關(guān)FLAG標(biāo)記中加入了,但還是報(bào)相同錯(cuò)誤,后仔細(xì)查看了錯(cuò)誤信息,發(fā)現(xiàn)得在<thrift>/compiler/cpp和<thrift>/lib/cpp中的Makefile中加入才行

三、在rhel4.8上安裝thrift.0.8
由于gcc32無法編譯0.8,所以要執(zhí)行
# ./configure CXX=g++4
就可以了,(系統(tǒng)上得安裝gcc4相關(guān)的rpm),
如果不這樣,直接改MakeFile中CXX=g++4的話,執(zhí)行過程中會(huì)報(bào)一個(gè)錯(cuò):
unsupported hardcode properties
導(dǎo)致無法繼續(xù)執(zhí)行下去的。

使用java時(shí),要編譯thrift的java包
cd thrift-0.6.0/lib/java
ant
編譯完成以后會(huì)在當(dāng)前目錄下出現(xiàn)一個(gè)libthrift.jar
把libthrift.jar拷貝到/usr/local/lib下(這個(gè)位置是因?yàn)樵趖hrift的tutor中,java sample code的build.xml中指明了要在/usr/local/lib找到這個(gè)jar文件)。
然后把/usr/local/lib/libthrift.jar也加入到CLASSPATH中。

三。no class template named `tr1' in `std'
還是因?yàn)榫幾g器老的原因,只有在gcc 4.3以后才加入了tr1,所以只能換成boost中的tr1,具體在頭文件中加入
在<thrift>/lib/cpp/src/concurrency/ThreadManager.h 中改為
#include <boost/tr1/memory.hpp>
#include <boost/tr1/functional.hpp>
就行了
////////////////////////////////////
在MacOS中使用參考:
http://wiki.apache.org/thrift/ThriftUsageObjectiveC
/////////////////////////////////////////////////////////////

數(shù)據(jù)類型
??? ?* Base Types:基本類型 bool,byte,i16,i32,i64,double,string(UTF-8 編碼)
??? ?* Struct:結(jié)構(gòu)體類型
??? ?* Container:容器類型,即List、Set、Map
??? ?* Exception:異常類型
??? ?* Service: 定義對(duì)象的接口,和一系列方法

一個(gè)server只允許定義一個(gè)接口服務(wù)。這樣的話多個(gè)接口需要多個(gè)server。這樣會(huì)帶來資源的浪費(fèi)。同意通過繼承接口的方式。

協(xié)議
? Thrift可以讓你選擇客戶端與服務(wù)端之間傳輸通信協(xié)議的類別,在傳輸協(xié)議上總體上劃分為文本(text)和二進(jìn)制(binary)傳輸協(xié)議, 為節(jié)約帶寬,提供傳輸效率,一般情況下使用二進(jìn)制類型的傳輸協(xié)議為多數(shù),但有時(shí)會(huì)還是會(huì)使用基于文本類型的協(xié)議,這需要根據(jù)項(xiàng)目/產(chǎn)品中的實(shí)際需求:
??? * TBinaryProtocol – 二進(jìn)制編碼格式進(jìn)行數(shù)據(jù)傳輸。
??? * TCompactProtocol – 這種協(xié)議非常有效的,使用Variable-Length Quantity (VLQ) 編碼對(duì)數(shù)據(jù)進(jìn)行壓縮。
??? * TJSONProtocol – 使用JSON的數(shù)據(jù)編碼協(xié)議進(jìn)行數(shù)據(jù)傳輸。
??? * TSimpleJSONProtocol – 這種節(jié)約只提供JSON只寫的協(xié)議,適用于通過腳本語言解析
??? * TDebugProtocol – 在開發(fā)的過程中幫助開發(fā)人員調(diào)試用的,以文本的形式展現(xiàn)方便閱讀。

傳輸層
??? * TSocket- 使用堵塞式I/O進(jìn)行傳輸,也是最常見的模式。
??? * TFramedTransport- 使用非阻塞方式,按塊的大小,進(jìn)行傳輸,類似于Java中的NIO。
??? * TFileTransport- 顧名思義按照文件的方式進(jìn)程傳輸,雖然這種方式不提供Java的實(shí)現(xiàn),但是實(shí)現(xiàn)起來非常簡(jiǎn)單。
??? * TMemoryTransport- 使用內(nèi)存I/O,就好比Java中的ByteArrayOutputStream實(shí)現(xiàn)。
??? * TZlibTransport- 使用執(zhí)行zlib壓縮,不提供Java的實(shí)現(xiàn)。

服務(wù)端類型
??? * TSimpleServer -? 單線程服務(wù)器端使用標(biāo)準(zhǔn)的堵塞式I/O。
??? * TThreadPoolServer -? 多線程服務(wù)器端使用標(biāo)準(zhǔn)的堵塞式I/O。
??? * TNonblockingServer – 多線程服務(wù)器端使用非堵塞式I/O,并且實(shí)現(xiàn)了Java中的NIO通道。
當(dāng)服務(wù)器端使用socket協(xié)議時(shí),可以用simple|thread-pool|threaded|nonblocking等方式運(yùn)行,從而獲得更好的性能。

基本使用
thrift的類型有如下幾種:
/**
* The first thing to know about are types. The available types in Thrift are:
*
* bool??????? Boolean, one byte
* byte??????? Signed byte
* i16???????? Signed 16-bit integer
* i32???????? Signed 32-bit integer
* i64???????? Signed 64-bit integer
* double????? 64-bit floating point value
* string????? String
* binary????? Blob (byte array)
* map<t1,t2> Map from one type to another
* list<t1>??? Ordered list of one type //對(duì)應(yīng)C++中的vector<t1>
* set<t1>???? Set of unique elements of one type
*
* Did you also notice that Thrift supports C style comments?
*/

例子
編寫角本service.thrift
/**
* This Thrift file can be included by other Thrift files that want to share
* these definitions.
*/
namespace cpp shared
//namespace java shared
//namespace perl shared
struct SharedStruct {
1: i32 key
2: string value
}//定義一個(gè)結(jié)構(gòu)體
//定義一個(gè)服務(wù)
service SharedService {
SharedStruct getStruct(1: i32 key)
}

使用下面的語句,生成cpp骨架文件
thrift –r –gen cpp service.thrift
(生成php骨架文件: # thrift –r –gen php service.thrift )

生成7個(gè)文件,分別是由service.thrift腳本定義的類型文件四個(gè),兩個(gè).h文件 (service_constants.h,service_types.h),兩個(gè)對(duì)應(yīng)的.cpp文件 (service_constants.cpp,service_types.cpp)。service_types對(duì)應(yīng)的文件中,定義了對(duì)應(yīng)的由 service.thrift腳本定義的類型。例如struct SharedStruct對(duì)應(yīng)到一個(gè)類。另外三個(gè)文件分別是由service.thrift腳本中所定義的服務(wù)相關(guān)的文件,分別是 SharedService .h,SharedService .cpp,以及SharedService_server.skeleton.cpp 骨架文件,我們只需要修改SharedService_server.skeleton.cpp 骨架文件中相關(guān)的接口部分的邏輯,即可生成對(duì)應(yīng)的服務(wù)。

///////////////////////////
進(jìn)入cpp目錄下,執(zhí)行make命令,如果編譯出錯(cuò),第一個(gè)錯(cuò)誤是
/usr/local/include/thrift/protocol/TBinaryProtocol.tcc:147:35: error: there are no arguments to ‘htons’ that depend on a template parameter, so a declaration of ‘htons’ must be available
則修改Makefile,加上編譯選項(xiàng) -DHAVE_NETINET_IN_H
server: CppServer.cpp
? ? ? ? g++?-DHAVE_NETINET_IN_H?-o CppServer -I${THRIFT_DIR} -I${BOOST_DIR} ?-I../gen-cpp -L${LIB_DIR} -lthrift CppServer.cpp ${GEN_SRC}

編譯thrift和使用 - 翱翔云顛的博客 - 我的搜狐


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 国产欧美成人不卡视频 | 青青青激情视频在线最新 | 一区二区三区四区 | 性视频xxx| 国产在线观看99 | 日本裤袜xxxx视频 | 九九热观看视频 | 亚洲精品久久精品h成人 | 日本不卡一区二区三区 | 天天做天天爱天天爽综合网 | 99热这里只有精 | 亚洲精品国产精品国自产观看 | 久久草精品 | 国产色婷婷精品免费视频 | 老司机午夜精品视频播放 | 色鬼久久爱综合久久鬼色 | 欧美成人免费全部观看天天性色 | 分分操这里只有精品 | 日本在线毛片视频免费看 | 一级做a爱片特黄在线观看免费看 | 婷婷开心激情 | a4yy私人毛片 | 日日干狠狠操 | 国产在线精品福利大全 | 国产亚洲一区二区在线观看 | 久操视频在线播放 | 日本一区二区三区在线 观看网站 | 亚洲乱码视频 | 伊香蕉大综综综合久久 | 国产欧美日韩中文久久 | 久久久视频在线 | 91热久久免费频精品99欧美 | a级做爰视频在线观看 | 特级aa一级欧美毛片 | 国产乱码精品一区二区三区卡 | 欧美精品国产一区二区三区 | 思99re久久这里只有精品首页 | 桃子在线观看 | 午夜一级毛片看看 | 欧美午夜片| 自拍偷自拍亚洲精品被多人伦好爽 |