首页 > windows下rpc框架thrift的环境配置

windows下rpc框架thrift的环境配置

windows下rpc框架thrift的环境配置

引用链接:

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

最近在弄windows下 的Facebook的rpc 框架 thrift ,

网上东西看了很多, 但是大都不能一篇到位, 这里总结了一下,

也记一下自己遇到的问题和解决的方法

这里把我在实际过程中遇见的问题,以及问题的解决方法写一下:

1、版本问题:

基本是参照现这个版本来的:

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

2、概述

总体有两种思路,一种是利用virtual studio 的nuget 包管理工具,编译安装thrift以及其libevent,boost,openssl这几个依赖库,

一种是从这些各自的官网,或者git-hub上下载源码编译安装,但是由于我本地的nuget一直无法连接(有vpn),遂放弃这种方式

这个方式的指导连接在这里:

https://blog.csdn.net/xie1xiao1jun/article/details/53332504

3、实际问题

1、openssl, 原文的openssl编译安装方式写的部分地方不正确 以下是纠正部分:

https://blog.csdn.net/fm0517/article/details/91578554

4. 打开VS命令行工具

VS2013 x64 本机工具命令提示,进入目录下面的目录中

D:ProgramIDEMicrosoft Visual Studio 12.0VCinamd64

执行命令:vcvars64.bat

5. 进入openssl源码目录下,执行配置

perl Configure VC-WIN64A no-asm --prefix=D:360Downloadsopenssl-1.0.2s

其中prefix后面的路径是源码路径。

2、libevet 配置文件找不到

使用libevent的问题

1)找不到

event-config.h在E:libevent-2.1.8-stableWIN32-Code makeevent2目录下,

因此编译完成后要把E:libevent-2.1.8-stableWIN32-Code make下的所有文件和目录拷贝到E:libevent-2.1.8-stableinclude

以下是原文

Windows 10 Visual Studio 2017 安装配置 Apache Thrift (C++)

最近需要使用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

下载安装Boost,记住**{Boost安装目录}。安装过程见Windows 10 Visual Studio 2017 安装配置 Boost。

下载安装OpenSSL,下载网址。安装过程见Windows 10 Visual Studio 2017 安装配置 OpenSSL。记住
{OpenSSL 目录}**

从 Apache Thrift 官网下载 Windows 平台的 Thrift 源代码和编译器。

下载libevent,非阻塞的 Thrift 服务器需要这个库。

解压缩下载的文件。

去**{thrift 安装目录}libcpp 目录,点击thrift.sln**,打开 VS 项目,里面有两个项目libthrift 和 libthriftnb。

会有一个对话框询问是否升级,点击升级。

打开 Developer Command Prompt for VS 2017。

在 Developer Command Prompt 中进入 {libevent 安装目录}。

输入 nmake -f Makefile.nmake 来安装libevent。

完后后,右键 libthrift项目,点击属性 > C/C++ > 常规。

在附加包含目录中添加:

{boost 安装目录}oost_1_64_0;{boost 安装目录}oost_1_64_0oost;{OpenSSL 目录}inc32

点击库管理器 > 附加库目录,添加如下文件:

{OpenSSL 目录}out32dll

右键 libthriftnb项目,点击属性 > C/C++ > 常规。在附加包含目录中添加

{boost 安装目录}oost_1_64_0;{boost 安装目录}oost_1_64_0oost;{OpenSSL 目录}inc32;{libevent_install_dir};{libevent_install_dir}include;{libevent_install_dir}WIN32-Code;

点击库管理器 > 附加库目录,添加如下文件:

{OpenSSL 目录}out32dll

然后编译生成文件,如果使用DEBUG模式,会在**{thrift 目录}libcppDEBUG**中生成libthrift.lib。

4 建立 Server、Client 示例

4.1 建立 Thrift C++ Server

创建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() } 

编译生成 C++ 源文件,会生成 gen-cpp文件夹

thrift -r --gen cpp Hello.thrift

生成的文件如下:

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

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

右键项目,点击属性 > C/C++ > 常规 > 附加包含目录,添加:

{thrift 安装目录}libcppsrc;{thrift 安装目录}libcppsrc hriftwindows;{boost 安装目录}oostoost_1_64_0;%(AdditionalIncludeDirectories)

点击链接器 > 常规 > 附加库目录,添加:

{boost 安装目录}oostoost_1_64_0stagelib;{thrift 安装目录}libcppDebug;%(AdditionalLibraryDirectories)

点击链接器 > 所有选项 > 附加依赖项,添加:

libboost_thread-vc141-mt-gd-1_64.lib;libboost_chrono-vc141-mt-gd-1_64.lib;libthrift.lib;

如果是 0.91 之前的 thrift,还需要在Hello_server.skeleton.cpp源文件main函数前面加上如下代码:

WSADATA wsaData = {};
WORD wVersionRequested = MAKEWORD(2, 2);
int err = WSAStartup(wVersionRequested, &wsaData);

点击生成,Server端就可以启动了。

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

4.2 生成 Thrift C++ Client

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

#include "Hello.h"
#include  
#include  
#include  
#include 
#include 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 socket(new TSocket("localhost", 9090));boost::shared_ptr transport(new TBufferedTransport(socket));boost::shared_ptr 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

二、nuget方式

配置nuget boost 库

点击右键:管理nuget程序包

Install-Package boost-vc140

(v1.62.0)

Install-Package openssl.v140.windesktop.msvcstl.dyn.rt-dyn

(OpenSSL 1.0.2d )

Install-Package libevent_vc120

(2.14 )

编译完成:

拷贝src,lib文件到项目

给出一个windows配置好的版本

里面包括vs2013,vs2015

thrift-master-0.9.3libcppVS2013

thrift-master-0.9.3libcppVS2015

————————————————

版权声明:本文为CSDN博主「冰_封」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/xie1xiao1jun/article/details/53332504

更多相关:

  • 这里用散装版本的AutoScssStruct4Vue为例 先去https://github.com/accforgit/AutoScssStruct4Vue下载 然后把解压后的包放入C:UsersAdministrator.vscodeextensions(地址根据你自己的安装目录而定)    点开目录在资源管理器...

  • 网上搜到的结果大都不令人满意,这里综合了网上的结构,做了小许改动.希望对大家有帮助. 在Linux下的目录结构操作基本上使用opendir,readdir,closedir就够了. #include #include #include #include

  • 文章目录git 最小配置作用域git 创建本地仓库git log 查看版本演进.git 目录refs目录objectsgit 三种对象类型详解 (commit ,tree,blob)...

  • 一 . 进入目录权限 如果我在普通用户下创建了一个目录f1,然后使用chomd u-rwx,g-rwx,o-rwx之后,我在普通用户下想进入f1目录,权限不允许。 然后我切换到超级用户下,再次尝试进入到f1目录,这个时候允许进入。 然后回到普通用户下,只给f1的所有者读的权限,然后在普通用户下尝试进入,此时权限还是...

  • 如果你想在自己的IPhone上安装一个ipa文件,你的手机是无法正常安装的,(越狱,企业证书分发除外)但是我们可以通过以下步骤来实现,前提要有自己的开发者账号。接下来就看一下具体的步骤:第一步:用Xcode新建一个工程Bundle identifier不要和手机中已有的的APP重复,然后用自己的证书打包出ipa文件。第二步:获取mob...

  • 刚接触,啥子都不会,按着教程走需求:识别图片中的文字信息环境:windows系统开发语言:python3.5使用工具类:1.pyocr2.PIL3.tesseract-ocr步骤:1.pyocr网络通直接使用命令:pip install pyocr网络不通,转至https://pypi.python.org/pypi/pyocr/0....

  • 1、前言程序设计好以后会生成若干可执行文件和依赖文件。为了方便程序被更好地使用,需要将程序封装为一个安装程序。2、平台和环境Windows系统安装NSIS下载地址:https://nsis.sourceforge.io/DownloadNSIS(Nullsoft Scriptable Install System)是一个开源的 Win...

  • 展开全部 f=open('xxx','r',encoding='utf-8') file=f.readlines() f.close() f=open('xxx','w',encoding='utf-8') for i in len(file): ----file[i]=file[i].split(',') ----file[i][1...

  • PIL(Python Imaging Library)是Python中一个强大的图像处理库,但目前其只支持到Python2.7 pillow是PIL的一个分支,虽是分支但是其与PIL同样也具有很强的图像处理库。 Python3.7.0 如何安装pillow 此安装方法在windows7环境下完成: >>>win+r调出运行窗口,键入c...

  • 异步模式的服务器源码 //g++ -g async_tcp_server.cpp -o async_tcp_server -lboost_system //#include #include #include #include

  • 近来狂热地研究boost的开发技术,现将读书笔记整理如下: 需要说明的是, 本博该专题下面关于boost的源码是采用boost1.55版本, 运行在Ubuntu 14.04 64bit下面, 使用apt包安装(非源码编译安装), 后续不再做说明. 同步socket类型的服务器源码实现: //g++ -g sync_tcp_s...