thrift cpp环境搭建:

1、  安装boost_1_53_0,注意,使用vs2010版本时,使用二进制的boost安装版本,生成的lib有可能是,在后续操作会出问题。在源码目录中,运行bootstrap.dat,然后会生成b2.exe文件,该文件可以编译boost需要的库,生成文件在boost\stage\lib文件下,后续对于lib的添加使用该路径。

2、  网络下载Win64OpenSSL_Light-1_1_0f.exe、Win64OpenSSL- 1_1_0f.exe,可以选择安装后者,前者是轻量级的不含源码的目标文件。

3、  下载thrift-0.9.0源码以及编辑器。打开thrift-0.9.0\thrift-0.9.0\lib\cpp中sln工程,编译libthrift工程和libthriftnb工程。前者为阻塞的,后者为非阻塞模式的服务器,非阻塞模式的服务器需要libevent库。

4、  对与编译libthrift工程,添加依赖头文件(C/C++ - general – Additional include directories):

C:\local\boost_1_53_0

C:\OpenSSL-Win64\include

添加依赖的链接库:(Linker – general – Additional library directories)

C:\local\boost_1_53_0\stage\lib

build该工程,会在debug文件夹中生成后续需要的libthrift.lib文件。

5、  对于写好的接口文件helloworld.thrift,通过命令行生成对应的接口文件,文件在gen-cpp中,其中含有HelloWorld_server.skeleton.cpp为服务器框架。

6、  通过vs2010创建空项目,添加gen-cpp中的头文件与资源文件,添加boost库的依赖头文件以及lib方法同上,添加thrift的相关文件为:

include项:C:\Users\Administrator\Desktop\thrift-0.9.0\thrift-0.9.0\lib\cpp\src

lib项:C:\Users\Administrator\Desktop\thrift-0.9.0\thrift-0.9.0\lib\cpp\Debug

此时编译可能出现“error LNK2019”,无法解析的外部符号,此问题由于缺少相应的库文件,解决方法为:Linker – input – Additional dependencies 添加libthrift.lib即可。

编译过程可能出现语句报错,譬如会有:using namespace ; 这种语句,注释掉即可。

7、  此时可以编译通过,但是会出错:

此时,在生成得到服务器框架的cpp中main函数中添加TWinsockSingleton::create();即可,在高版本的thrift已经不需要这一句了。

再次运行即可。

打开之前python的客户端,设置好端口,运行即可在服务器看到通信结果。

服务器的编写可以在生成的框架下进行修改,客户端的编写为:

#include "HelloWorld.h"

#include <thrift\transport\TSocket.h>
#include <thrift\transport\TBufferTransports.h>
#include <thrift\protocol\TBinaryProtocol.h>
#include <thrift\server\TSimpleServer.h>
#include <thrift\transport\TServerSocket.h>
//#include <thrift\transport\TBufferTransports.h> using namespace apache::thrift;
using namespace apache::thrift::protocol;
using namespace apache::thrift::transport;
using boost::shared_ptr;
#include <iostream>
int main(int argc,char **argv)
{
shared_ptr<TSocket> socket(new TSocket("127.0.0.1",9090));
shared_ptr<TTransport> transport(new TBufferedTransport(socket));
shared_ptr<TProtocol> protocol(new TBinaryProtocol(transport));
HelloWorldClient client(protocol);
try
{
transport->open();
}
catch(TTransportException)
{
transport->close();
}
client.ping();
std::string s;
client.sayHello(s);
std::cout<<s<<std::endl;
getchar();
return 0;
}

  

如上,其中sting的返回值需要修改服务器中sayHello对应函数,使得s获得一个返回值。

客户端工程同样需要添加以来库,同时将gen-cpp中的文件(除服务器框架文件)拷到目录下,添加到项目中。

Thrift 采用C/S模型,不支持双向通信,为了解决这个问题,通常在通信双方建立两个通信通道,开两个端口。

windows下thrift的使用(C++)的更多相关文章

  1. windows下thrift的使用(python)

    1.下载thrift,下载地址:http://archive.apache.org/dist/thrift/0.9.3/ 2.在编写python的thrift代码时,需要先安装thrift modul ...

  2. Thrift架构~windows下安装和Hello World及编码引起的错误

    最近开始正式接触Thrift架构,很牛B的技术,它被apache收纳了,属于开源中的一员,呵呵. 概念: Thrift源于大名鼎鼎的facebook之手,在2007年facebook提交Apache基 ...

  3. Apache Thrift 在Windows下的安装与开发

    Windows下安装Thrift框架的教程很多.本文的不同之处在于,不借助Cygwin或者MinGW,只用VS2010,和Thrift官网下载的源文件,安装Thrift并使用. 先从官网 下载这两个文 ...

  4. Windows下杀掉全部的子线程

    最近遇到一个问题,就是在Windows下怎么杀掉全部的子线程,现把解决方法记录下. 问题来源: 用python执行了一个bat脚本,脚本的内容是执行一系列的adb命令,然后运行一个server.其中需 ...

  5. 在windows下安装gulp —— 基于 Gulp 的前端集成解决方案(一)

    相关连接导航 在windows下安装gulp —— 基于 Gulp 的前端集成解决方案(一) 执行 $Gulp 时发生了什么 —— 基于 Gulp 的前端集成解决方案(二) 常用 Gulp 插件汇总 ...

  6. 让 windows 下的命令行程序 cmd.exe 用起来更顺手

    在 Windows 下使用 Larave 框架做开发,从 Composer 到 artisan 总是避免不了和 cmd.exe 打交道,系统默认的命令行界面却是不怎么好看,且每行显示的字符数是做了限制 ...

  7. Windows下Visual studio 2013 编译 Audacity

    编译的Audacity版本为2.1.2,由于实在windows下编译,其源代码可以从Github上取得 git clone https://github.com/audacity/audacity. ...

  8. Windows下Nginx配置SSL实现Https访问(包含证书生成)

    Vincent.李   Windows下Nginx配置SSL实现Https访问(包含证书生成) Windows下Nginx配置SSL实现Https访问(包含证书生成) 首先要说明为什么要实现https ...

  9. 关于Linux和Windows下部署mysql.data.dll的注册问题

    mysql ado.net connector下载地址: http://dev.mysql.com/downloads/connector/net/ 选择版本: Generally Available ...

随机推荐

  1. JavaScript的基本概念

    主要内容: 语法 数据类型 流控制语句 理解函数 ECMA-262描述了JavaScript语法等基本概念.目前,ECMA-262第3版中定义的ECMAScript是各个浏览器实现最多的版本.所以主要 ...

  2. 常见踩坑案例(二)-Request method 'POST' not supported

    一 前言 最近涉及到与前后端的数据对接,按道理来说没一点压力结果被一前端童鞋带坑里去了(不过也是很久没写过这种前后端分离进行联调的事情了,如果是一个人全套弄的话就不会出现下面问题). 二 Reques ...

  3. Web 前端开发规范文档

    通用规范: TAB键用两个空格代替(WINDOWS下TAB键占四个空格,LINUX下TAB键占八个空格). CSS样式属性或者JAVASCRIPT代码后加“;”方便压缩工具“断句”. 文件内容编码均统 ...

  4. aarch64_l4

    livestreamer-1.12.2-7.fc26.noarch.rpm 2017-02-11 17:38 537K fedora Mirroring Project lizardfs-adm-3. ...

  5. Scala中“=>”用法及含义

    => has several meanings in Scala, all related to its mathematical meaning as implication. 1. In a ...

  6. 洛谷P2194HXY烧情侣

    传送门啦 这个题可以说是tarjan强连通分量的裸题,但需要维护每个强连通分量的最小值,所以做法就很明确了. 我们先明确几个数组的意思: 1.首先是tarjan缩点中的几个数组: dfn[i]:i点的 ...

  7. jupyter(ipython notebook) 安装和入门教程

    近期大家无论是自己做数据分析还是紧急答辩做PPT,可能都需要画一些数据的展示图:以前大家都是用excel画图,但excel画图存在一定的局限性,比如你要画个累积直方图,excel就很麻烦了,所以给大家 ...

  8. WebApi 插件式构建方案:集成加载数据库连接字符串

    body { border: 1px solid #ddd; outline: 1300px solid #fff; margin: 16px auto; } body .markdown-body ...

  9. 全文搜索引擎 Elasticsearch (二) 使用场景

    1.场景—:使用Elasticsearch作为主要的后端 传统项目中,搜索引擎是部署在成熟的数据存储的顶部,以提供快速且相关的搜索能力.这是因为早期的搜索引擎不能提供耐用的​​存储或其他经常需要的功能 ...

  10. 取得项目的 Git 仓库

    有两种取得 Git 项目仓库的方法.第一种是在现存的目录下,通过导入所有文件来创建新的 Git 仓库.第二种是从已有的 Git 仓库克隆出一个新的镜像仓库来. 在工作目录中初始化新仓库 要对现有的某个 ...