windows下thrift的使用(C++)

windows下thrift的使用(C++)

thrift cpp环境搭建:

1、  安装boost_1_53_0,注意,使用vs2010版本时,使用二进制的boost安装版本,生成的lib有可能是<span>windows下thrift的使用(C++)</span>,在后续操作会出问题。在源码目录中,运行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、  此时可以编译通过,但是会出错:

 <span>windows下thrift的使用(C++)</span>

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

 <span>windows下thrift的使用(C++)</span>

再次运行即可。

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

 <span>windows下thrift的使用(C++)</span>

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

#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模型,不支持双向通信,为了解决这个问题,通常在通信双方建立两个通信通道,开两个端口。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/119490.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 苹果哪款手机无刘海_刘海屏是什么意思

    苹果哪款手机无刘海_刘海屏是什么意思用iPhone这么多年你们用过iPodTouch吗?在iPhone4发布的时候我接触过一次iPodTouch,当时是同事买的超薄的,感觉就是为打游戏制造的,(本人热爱游戏)那时候感觉真…

    2022年8月10日
    10
  • yum安装telnet命令_centos 安装telnet

    yum安装telnet命令_centos 安装telnet简介Telnet协议是TCP/IP协议族中的一员,是Internet远程登录服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。在终端使用者的电脑上使用telnet程序,用它连接到服务器。终端使用者可以在telnet程序中输入命令,这些命令会在服务器上运行,就像直接在服务器的控制台上输入一样。可以在本地就能控制服务器。要开始一个telnet会话,必须输入用户名和密码来登…

    2022年9月23日
    3
  • 实际项目中如何使用Git做分支管理「建议收藏」

    实际项目中如何使用Git做分支管理「建议收藏」记得刚工作的时候根本不知道什么是版本管理工具,有一次和别人聊天,人家问你们公司代码用什么版本管理工具?我说啥是版本管理工具,我们一般用U盘拷贝,然后人家就顾左右而言他了。后来我知道了有个东西叫,后来又知道了还有个东西叫。所以说刚毕业的同学一定要优先进入专业的大公司,就像年轻时候应该去大城市闯两年一样,眼界以及你遇到的牛人会大大加快你以后成功的进程。本文主要是介绍一种在具体实践中使用Git来管理项目开发的一种成功的方式,其实主要思想来源于这篇文章Asuccessful…

    2022年10月1日
    7
  • 3极管npn和pnp_npn开关电路工作原理

    3极管npn和pnp_npn开关电路工作原理===================================================================三极管,全称应为半导体三极管,也称双极型晶体管、晶体三极管,是一种电流控制电流的半导体器件·其作用是把微弱信号放大成幅度值较大的电信号,也用作无触点开关。晶体三极管,是半导体基本元器件之一,具有电流放大作用,是电子电路的核心元件。三极管是在一块半导体基片上制作…

    2026年2月2日
    4
  • 带你详细了解,一致性哈希算法的实现原理

    带你详细了解,一致性哈希算法的实现原理一致性哈希算法在1997年由麻省理工学院的Karger等人在解决分布式Cache中提出的,设计目标是为了解决因特网中的热点问题,初衷和CARP十分类似。一致性哈希修正了CARP使用的简单哈希算法带来的问题,使得DHT可以在P2P环境中真正得到应用。但现在一致性哈希算法在分布式系统中也得到了广泛应用,研究过Memcached缓存数据库的人都知道,Memcached服务器端本身不提供分布式Cache的一致性,而是由客户端来提供,具体在计算一致性哈希时采用如下步骤:

    2022年7月27日
    8
  • 刚装上最新node,npm install报这个错误!求ndoe大神解答!!!

    刚装上最新node,npm install报这个错误!求ndoe大神解答!!!

    2021年10月11日
    46

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号