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工程配置:

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文件夹中的两个文件,如下图(由于文件所在位置不一样路径不同):

 

 

然后编译,则可正常通过,服务器和客户端所配环境和上一版本相同。