1、先官网下载thrift源码和 thrift-0.10.0.exe,我下载的0.10.0版本,下载后解压
2、进入lib/cpp目录,用vs2015打开sln项目,两个lib工程(1个阻塞的libthrift,另一个是非阻塞的libthriftnb)
3、先环境配置,选中项目,右键-管理NuGet程序包。如果用的阻塞的就只要添加boost和openssl就行,如果用非阻塞还得多加一个libevent的库,下载时选中和vc对应的库文件版本。
4、配置好后,直接生成项目,会生成libthrift.lib文件。
5、然后编写faceDector.thrift文件
namespace cpp faceDector
struct User{
1:i64 id,
2:string name,
3:i32 age,
4:bool vip
}
service FaceDector{
i32 add(1:i32 a,2:i32 b)
string faceDector(1:string username,2:string password)
}`
6、然后用命令行在gen-cpp文件夹下生成一堆h文件和cpp文件 命令( thrift-0.10.0.exe -gen cpp faceDector.thrift )
7、把生成的这一堆文件复制到建立server的空项目里面,同样的把boost和openssl的头文件库添加进来,然后还把原来生成的libthrift.lib 配置进来:
Sever工程 Server>属性->C/C++->常规->附加包含目录->\boost\boost_1_51
Sever工程 Server>属性->C/C++->常规->附加包含目录->\thrift-0.10.0\lib\cpp\src
Sever工程 Server>属性->C/C++->常规->附加包含目录->\thrift-0.10.1\lib\cpp\src\thrift
Sever工程 Server>属性->连接器->附加库目录->\boost\boost_1_51\lib
Sever工程 Server>属性->连接器->附加库目录->\thrift-0.10.1\lib\cpp\Debug
8、新建client工程,生成的这一堆文件复制到建立client的空项目里面,删除FaceDector_server.skeleton.cpp,并额外添加client.cpp文件。Client工程也做上面的配置。
9、client.cpp中加上下面代码:
#include <iostream>
#include "FaceDector.h"
#include <thrift/transport/TSocket.h>
#include <thrift/transport/TBufferTransports.h>
#include <thrift/protocol/TBinaryProtocol.h>
using namespace apache::thrift;
using namespace apache::thrift::protocol;
using namespace apache::thrift::transport;
using boost::shared_ptr;
int main(int argc, char **argv) {
boost::shared_ptr<TSocket> socket(new TSocket("localhost", 9090));
boost::shared_ptr<TTransport> transport(new TBufferedTransport(socket));
boost::shared_ptr<TProtocol> protocol(new TBinaryProtocol(transport));
faceDector::FaceDectorClient client(protocol);
try {
transport->open();
int res = client.add(100, 200);
// 我们的代码写在这里
printf("recv res[%d]",res);
transport->close();
}
catch(TException& tx){
printf("error:",tx.what());
}
return 0;
}
10、这后,分别生成server和client工程,如提示缺少库或链接失败,可查看头文件和库文件路径是否正确,或者直接用NuGet下载缺少程序包。
11、最后先启动server再启动client,结果client能和server服务器通信,就ok