thrift学习

学习thrift的一些总结

最近由于项目组买了面结构光传感器,自带一个软件,然而老师想我们自己做二次开发,然后就和技术聊了,他们的是基于thrift来做的,而thrift是个啥玩意,没办法,只能硬着头皮学了,这里记录一下学习中掉的坑。

thrift是个什么东西

Thrift是一种接口描述语言和二进制通讯协议,[1]它被用来定义和创建跨语言的服务。[2]它被当作一个远程过程调用(RPC)框架来使用,是由Facebook为“大规模跨语言服务开发”而开发的。它通过一个代码生成引擎联合了一个软件栈,来创建不同程度的、无缝的跨平台高效服务,可以使用C#、C++(基于POSIX兼容系统[3])、Cappuccino、[4]Cocoa、Delphi、Erlang、Go、Haskell、Java、Node.js、OCaml、Perl、PHP、Python、Ruby和Smalltalk。这里摘录维基百科的介绍。我理解就是可以使用一种语言写服务端,用另一种语言写客户端,客户端只需要知道服务端的接口就行了,至于服务端是使用什么语言,怎么实现的都不用在乎。

thrift安装

首先安装依赖

xingkp@xingkp-Vostro:~$ sudo apt-get install libboost-dev libboost-test-dev libboost-program-options-dev
 libevent-dev automake libtool flex bison pkg-config g++ libssl-dev

然后从官网下载thrift安装包http://archive.apache.org/dist/thrift/,我使用的操作系统是ubuntu16.04,由于甲方提供的服务端在thrift-0.11.0版本下编译,因此我下载的是thrift-0.11.0版本的压缩包,下载完压缩包,解压到home目录下,然后执行

xingkp@xingkp-Vostro:~$ cd thrift-0.11.0/

然后安装编译

xingkp@xingkp-Vostro:~/thrift-0.11.0$ ./configure
xingkp@xingkp-Vostro:~/thrift-0.11.0$ sudo make
xingkp@xingkp-Vostro:~/thrift-0.11.0$ sudo make install

当我执行make,出现了一个错误,后来查了好久,原来是我电脑上装了qt4和qt5,导致了编译的时候程序没能正确链接到对应的qt版本,因此在执行第一步的时候改为

xingkp@xingkp-Vostro:~/thrift-0.11.0$ ./configure -with-qt5=no

这样在后续步骤才没出错
编译完成还需要添加环境变量,执行

xingkp@xingkp-Vostro:~$ sudo gedit ~/.bashrc

在打开的文件末尾添加export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib:/usr/lib
如果安装成功,那么查看thrift版本应该是这样的

xingkp@xingkp-Vostro:~$ thrift -version
Thrift version 0.11.0

thrift默认安装在/usr/local/下面,查看/usr/local/lib文件夹应该有thrift相关的文件,这样就安装完成了。
在这里插入图片描述

thrift程序编译

如果是自己编写服务端,那应该首先创建一个thrift文件,然后生成cpp文件,再编写客户端,再编译,由于甲方已经编写好了服务端,这里直接对服务端进行编译。
首先进入gen-cpp文件夹

xingkp@xingkp-Vostro:~$ cd 3d_scan_thrift_test/gen-cpp/
xingkp@xingkp-Vostro:~/3d_scan_thrift_test/gen-cpp$

然后执行编译

xingkp@xingkp-Vostro:~/3d_scan_thrift_test/gen-cpp$ g++ -std=c++11 -DHAVE_NETINET_IN_H -g -I/usr/local/include/thrift  
scan_3d.cpp  techlego_meshwork_constants.cpp techlego_meshwork_types.cpp techlego_vtop_constants.cpp 
techlego_vtop_types.cpp scan_3d_server.skeleton.cpp  -o scan_3d -L/usr/local/lib -lthrift

生成可执行文件scan_3d(服务端)

编写客户端

xingkp@xingkp-Vostro:~/3d_scan_thrift_test/gen-cpp$ g++ -std=c++11 -g -Ithrift -L -lm -pthread -lz -lrt -lssl 
scan_3d.cpp techlego_vtop_types.cpp techlego_vtop_constants.cpp client.cpp -o client -lthrift

编译完成后先执行服务端

xingkp@xingkp-Vostro:~/3d_scan_thrift_test/gen-cpp$ ./scan_3d

再执行客户端

xingkp@xingkp-Vostro:~/3d_scan_thrift_test/gen-cpp$ ./client

这里是调试用,实际上在windows下的面结构光采集软件可以集成了服务端,因此只需要编写客户端,即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
《程序员的Apache Thrift指南》是一本详细介绍Apache Thrift的书籍。Apache Thrift是一个高效的跨语言的远程过程调用(RPC)框架,能够帮助开发者轻松地在不同的编程语言之间进行通信。 这本指南以程序员的视角出发,提供了关于Apache Thrift的全面指导。首先,书中会介绍RPC的基本概念以及Apache Thrift在其中的作用和优势。读者将了解到如何使用Apache Thrift在不同的编程语言之间建立起通信通道,从而实现不同系统之间的协作和数据传输。 在介绍完基本概念后,指南将详细介绍如何使用Apache Thrift来定义和编写IDL(Interface Definition Language)。IDL是一种在不同编程语言中共享和访问代码的方法,并且Apache Thrift提供了一种简单而强大的方式来定义和生成IDL。 接下来,该书将深入介绍在不同编程语言中如何使用Apache Thrift来实现客户端和服务器端的代码。读者将学习到如何使用Apache Thrift提供的代码生成工具来生成客户端和服务器端的框架代码,并在此基础上实现具体的功能和逻辑。 另外,该指南还会介绍Apache Thrift的一些高级特性,如异常处理、扩展、并发和压缩等。通过这些章节的学习,程序员能够更好地了解如何使用Apache Thrift来构建可靠、高效的跨语言通信系统。 总之,《程序员的Apache Thrift指南》提供了对Apache Thrift的全面指导,帮助程序员更好地理解和利用此框架来构建跨语言的通信系统。无论是初学者还是有一定经验的开发者,都能从中获得实用的知识和技巧。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值