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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • hg261gu光猫说明书_hg2201t光猫设置教程

    hg261gu光猫说明书_hg2201t光猫设置教程电信光纤友华PT921G光猫激活成功教程关闭自带路由改桥接拨号教程电信光猫质量烂就算了,最受不了它自带的路由还做了手脚,导致VPN用不了。不让看AV就算了,打个外服游戏总可以吧?不知道为啥,网上关于光猫改桥接的教程基本没有,搜出来的也说得很不清楚,是和谐了还是什么原因不得而知。本人也是自己自己试出来的,其实修改难度并不大,只不过那个界面搞的特奇葩特不友好罢了。废话不多说,步骤如下:

    2022年10月8日
    4
  • Unity3D新手教学,让你十二小时,从入门到掌握!(一)[通俗易懂]

    Unity3D新手教学,让你十二小时,从入门到掌握!(一)[通俗易懂]unity入门教学,新手教学,新手到大神的教学。。。

    2026年1月27日
    4
  • 使用cdn实现免备案_阿里云备案的域名可以在腾讯云用吗

    使用cdn实现免备案_阿里云备案的域名可以在腾讯云用吗昨晚在QQ群看到的,目前可以白嫖!无视阿里云给你分配的cname地址域名直接解析到发的那些cname地址上面就可以使用了!添加CDN,加速区域选择“全球(不含中国大陆)”,然后把域名解析到阿里云国内CDN节点IP上。注意:知道的人多了或者也许会失效!这是我的网站测试的结果可以访问看一下速度:爱云影视…

    2025年10月23日
    6
  • DLL注入

    DLL注入DLL注入DLL注入原理dll注入实现过程功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML图表FLowchart流程图导出与导入导出导入DLL注入原理在Windows操作系统中,运行的每一个进程都生活在自己的程序空间中(保护模式),每一个进程都认为自己拥有整个机器的控制权,

    2022年5月17日
    64
  • idea激活码2021【2021.10最新】

    (idea激活码2021)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html1STL5S9V8F-eyJsaWNlbnNlSWQi…

    2022年3月27日
    143
  • 浅谈一下学Java和python哪个好(个人观点)「建议收藏」

    浅谈一下学Java和python哪个好(个人观点)「建议收藏」其实这是一篇容易引起撕逼的文章,java是一种覆盖范围广,可跨平台的编程语言,python也是近几年火遍全世界的语言。先说结论,java是基础,另外一个是加分项,我仅代表我个人观点,为了祖国和谐,人民安康,请各位看官尽量理性讨论。java和python哪个好?很多朋友碰到了一个很共性的问题,那就是编程语言的选择。虽然Python这两年确实很火,但如果你的学历不是硕士以上,数学能力也一般,就无脑选java,不要选择Python作为就业方向。单单只会Python这门语言的是找不到工作的!Pyth

    2022年7月9日
    25

发表回复

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

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