最近需要使用Thrift,所以在网上看了很多资料,不过很多教程都不够详细完整,导致我花了不少时间安装配置。在这里我把我配置的过程写下来和大家分享。


1 介绍

Apache Thrift 是一个跨语言的远程过程调用框架(RPC,Remote Procedure Call)。首先使用接口描述语言(IDL,Interface Description Language)编写 .thrift 文件,然后通过 Thrift 编译成C++、JAVA、C# 等语言的代码。这些代码之间可以互相远程调用。Thrift 封装了底层网络通信的内容,用户只需要编写顶层逻辑代码就可以了。

2 测试环境

  • Windows 10
  • Microsoft Visual Studio 2017
  • Apache Thrift 0.9.2.
  • Boost 1.64.0.
  • libevent-2.1.8-stable
  • OpenSSL 1.0.2l

3 使用 Visual Sdutio 2017 编译生成 libthrift.lib

  1. 下载安装Boost,记住{Boost安装目录}。安装过程见Windows 10 Visual Studio 2017 安装配置 Boost。
  2. 下载安装OpenSSL,下载网址。安装过程见Windows 10 Visual Studio 2017 安装配置 OpenSSL。记住{OpenSSL 目录}
  3. 从Apache Thrift 官网下载 Windows 平台的 Thrift 源代码和编译器。
  4. 下载libevent,非阻塞的 Thrift 服务器需要这个库。
  5. 解压缩下载的文件。
  6. {thrift 安装目录}\lib\cpp 目录,点击thrift.sln,打开 VS 项目,里面有两个项目libthriftlibthriftnb
  7. 会有一个对话框询问是否升级,点击升级。
  8. 打开 Developer Command Prompt for VS 2017
  9. 在 Developer Command Prompt 中进入 {libevent 安装目录}
  10. 输入 nmake -f Makefile.nmake 来安装libevent。
  11. 完后后,右键 libthrift项目,点击属性 > C/C++ > 常规
  12. 附加包含目录中添加:
    {boost 安装目录}\boost_1_64_0;{boost 安装目录}\boost_1_64_0\boost;{OpenSSL 目录}\inc32
  13. 点击库管理器 > 附加库目录,添加如下文件:
    {OpenSSL 目录}\out32dll
  14. 右键 libthriftnb项目,点击属性 > C/C++ > 常规。在附加包含目录中添加
    {boost 安装目录}\boost_1_64_0;{boost 安装目录}\boost_1_64_0\boost;{OpenSSL 目录}\inc32;{libevent_install_dir};{libevent_install_dir}\include;{libevent_install_dir}\WIN32-Code;
  15. 点击库管理器 > 附加库目录,添加如下文件:
    {OpenSSL 目录}\out32dll
  16. 然后编译生成文件,如果使用DEBUG模式,会在{thrift 目录}\lib\cpp\DEBUG中生成libthrift.lib。

4 建立 Server、Client 示例

4.1 建立 Thrift C++ Server

  1. 创建Hello.thrift文件
# Hello.thrift
namespace cpp Demo
service Hello{ string helloString(1:string para) i32 helloInt(1:i32 para) bool helloBoolean(1:bool para) void helloVoid() string helloNull()
}
  1. 编译生成 C++ 源文件,会生成 gen-cpp文件夹
    thrift -r --gen cpp Hello.thrift
    生成的文件如下:

  2. 新建 Visual Studio 项目,并将生成的文件粘贴入项目文件夹中。

  3. 我们只需要实现Hello_server.skeleton.cpp中的方法即可。

  4. 右键项目,点击属性 > C/C++ > 常规 > 附加包含目录,添加:
    {thrift 安装目录}\lib\cpp\src;{thrift 安装目录}\lib\cpp\src\thrift\windows;{boost 安装目录}\boost\boost_1_64_0;%(AdditionalIncludeDirectories)

  5. 点击链接器 > 常规 > 附加库目录,添加:
    {boost 安装目录}\boost\boost_1_64_0\stage\lib;{thrift 安装目录}\lib\cpp\Debug;%(AdditionalLibraryDirectories)

  6. 点击链接器 > 所有选项 > 附加依赖项,添加:
    libboost_thread-vc141-mt-gd-1_64.lib;libboost_chrono-vc141-mt-gd-1_64.lib;libthrift.lib;

  7. 如果是 0.91 之前的 thrift,还需要在Hello_server.skeleton.cpp源文件main函数前面加上如下代码:
WSADATA wsaData = {};
WORD wVersionRequested = MAKEWORD(2, 2);
int err = WSAStartup(wVersionRequested, &wsaData);
  1. 点击生成,Server端就可以启动了。

这些库的名称要以你自己安装的库为准,你需要去boost文件夹中查看这些库的准确名称。上面 {} 里面的安装目录也是这样。

4.2 生成 Thrift C++ Client

和 Server 的配置过程一样,只不过我们不用Hello_server.skeleton.cpp。我们需要自己编写客户端:

#include "Hello.h"
#include <thrift/transport/TSocket.h>
#include <thrift/transport/TBufferTransports.h>
#include <thrift/protocol/TBinaryProtocol.h>
#include <iostream>
#include <string>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));// 只需要实例化 HelloClient,然后就可以远程过程调用了Demo::HelloClient client(protocol);   transport->open();// Your Codes  std::cout << client.helloInt(10030341) << std::endl;std::string tem = "hello from Client";client.helloString(tem, tem);std::cout << tem << std::endl;transport->close();return 0;
}

4.3 演示

4.3.1 Server

4.3.2 Client

转载于:https://www.cnblogs.com/49er/p/7193829.html

Windows 10 Visual Studio 2017 安装配置 Apache Thrift (C++)相关推荐

  1. OpenGL 开发环境配置(Windows) - Visual Studio 2017 + GLFW + GLAD 详细图文教程

    OpenGL 开发环境配置(Windows) - Visual Studio 2017 + GLFW + GLAD 详细图文教程 大部分 OpenGL 是直接面向设备商的,如果开发者需要使用 Open ...

  2. Visual Studio 2017安装使用方法

    Visual Studio 2017 安装步骤 前期准备 安装过程 开发环境 启动 注册 项目创建 程序运行 下载地址和调试技巧见总篇--Microsoft Visual Studio快速运用教程 安 ...

  3. vs2017 c语言操作界面,Visual Studio 2017安装和使用教程(详细)

    原标题:Visual Studio 2017安装和使用教程(详细) 前言 说在前面,各位读者记得将 C语言程序设计 设置星标公众号呀! 不少小伙伴还是问我有关 VS 的安装过程,今天带来了详细的安装图 ...

  4. vs2017下载教程 c语言,Visual Studio 2017安装和使用教程(详细)

    原标题:Visual Studio 2017安装和使用教程(详细) 前言 说在前面,各位读者记得将 C语言程序设计 设置星标公众号呀! 不少小伙伴还是问我有关 VS 的安装过程,今天带来了详细的安装图 ...

  5. visual studio 2019安装配置可编写c/c++语言的IDE环境

    visual studio 2019安装配置可编写c/c++语言的IDE环境 IDE的下载和安装: 首先,到visual studio官网下载vs2019的安装程序. 学生.或个人开发者免费下载第一个 ...

  6. 关于Visual Studio 2017安装需要注意的细节

    关于Visual Studio 2017安装需要注意的细节 本人拿vs2017主要开发 windows api 编程 简称windows编程,C,C++,C#,winform ,webform编程, ...

  7. 【猿说VUE】Visual Studio Code安装配置

    Visual Studio Code安装配置 现在使用Visual Studio Code编码的人越来越多,凭借着免费,开源,轻量,跨平台的特点得到了大量开发人员的喜爱.该编辑器也集成了所有一款现代编 ...

  8. 关于Visual Studio 2017安装时共享组件、工具和 SDK安装位置不能更改的问题

    关于Visual Studio 2017安装时共享组件.工具和 SDK安装位置不能更改的问题 原文:https://blog.csdn.net/caoxuqiang/article/details/8 ...

  9. Visual Studio 2017 安装Windows SDK10.0.17134.0 失败的解决办法

    刚刚把电脑重装了,对于一个编程爱好者来说,安装完系统首先安装了Visual Studio 2017,安装完成后出现了"安装完成,但出现了警告,windowsSDK安装失败"!创建c ...

最新文章

  1. 【Zookeeper】源码分析之Leader选举(一)
  2. Processes and Threads
  3. python中类方法与实例方法的区别-Python实例方法、静态方法和类方法详解(包含区别和用法)...
  4. 运行GPU出现CUDA_ERROR_LAUNCH_FAILED
  5. ubuntu 上网总结
  6. 悟透JavaScript(美绘本)
  7. 比0 冷1度c语言编程,关于DS18B20的C语言程序(精确度0.1度).doc
  8. “http 500内部服务器错误”的解决方法
  9. 【Git】Git-常用命令备忘录(三)
  10. 排序算法时间复杂度和稳定性
  11. 一步步编写操作系统 71 直接操作显卡,编写自己的打印函数71-74
  12. 顶岗实习周记java方向_前途虽远,扶摇可接 | 商务日语专业顶岗实习动员大会...
  13. Mysql中的日期及时间相关函数
  14. 苹果4如何添加时间插件_越狱后如何备份已添加的插件以及源?
  15. artDialog | 经典的网页对话框组件
  16. 新团队团队融合研讨会_新的网络研讨会:如何避免持续交付的隐性成本
  17. ERROR [com.alibaba.druid.pool.DruidDataSource] - abandon connection
  18. 【Python爬虫实战】查找企业股东有哪些关联公司
  19. Chrome 印象笔记.剪裁登录弹出国际版
  20. ubuntu14.04编译安装strongswan

热门文章

  1. SharePoint 2007图文开发教程(3)---实现简单的WebPart
  2. 谷歌宣布即将开放 .dev 顶级域名注册
  3. 苹果要垄断?官方证实:T2安全芯片会限制新款Mac电脑第三方
  4. (python)Graph_tools模块学习
  5. 设计模式 2014-12-19
  6. 企业级监控软件Zabbix搭建部署之使用mutt+msmtp配置Zabbix邮件报警
  7. [三层架构+WCF]三层架构+WCF实现TaskVision
  8. php跨平台总结 常用预定义常量
  9. Ajax 中XmlHttp 乱码 的解决方法 (UTF8,GB2312 编码 解码)
  10. Lua脚本语言快速入门手册