编译thrift和使用 - 翱翔云颠的博客 - 我的搜狐
编译thrift和使用 - 翱翔云颠的博客 - 我的搜狐
编译thrift和使用
收藏到手机 转发 评论2011-08-03 17:34我使用的版本是thrift-0.6.1
解压以后,先看readme,其中说编译环境参考http://wiki.apache.org/thrift/ThriftRequirements,打开看:Language requirements
- C++
- Boost 1.33.1+
- libevent (optional, to build the nonblocking server)
- zlib (optional)
- Java
- Java 1.5+
- Apache Ant
- Apache Ivy (recommended)
- Apache Commons Lang (recommended)
- SLF4J
- C#: Mono 1.2.4+ (and pkg-config to detect it) or Visual Studio 2005+
- Python 2.4+ (including header files for extension modules)
- PHP 5.0+ (optionally including header files for extension modules)
- Ruby 1.8+ (including header files for extension modules)
- Erlang R12 (R11 works but not recommended)
- Perl 5
- Bit::Vector
- Class::Accessor
以C++为例,先安装Boost和libevent,zlib是一个支持压缩的,以后再说,按照网站的指示安装就可以了,
我编译thrift使用的是:
./configure --prefix=/usr/local/ --disable-static --with-libevent=/usr/local没有加--with-boost=/usr/local,因为我把boost放在/usr/include下了,所以能够找到因为我公司服务器是RHEL4,版本相对较老,所以出现了很多问题:
-。找不到BOOST
因我我早先已经在其它地方安装了boost,所以
#ln -s <我的boost root path>/boost /usr/include/boost二。undefined reference to `_Unwind_Resume'
因为编译器较老,所以需要加上-Wl,-Bdynamic -lgcc_s 这个参数就可以了,一开始我只是在thrift的根目录的Makefile文件中的相关FLAG标记中加入了,但还是报相同错误,后仔细查看了错误信息,发现得在<thrift>/compiler/cpp和<thrift>/lib/cpp中的Makefile中加入才行三、在rhel4.8上安装thrift.0.8
由于gcc32无法编译0.8,所以要执行
# ./configure CXX=g++4
就可以了,(系统上得安装gcc4相关的rpm),
如果不这样,直接改MakeFile中CXX=g++4的话,执行过程中会报一个错:
unsupported hardcode properties
导致无法继续执行下去的。使用java时,要编译thrift的java包
cd thrift-0.6.0/lib/java
ant
编译完成以后会在当前目录下出现一个libthrift.jar
把libthrift.jar拷贝到/usr/local/lib下(这个位置是因为在thrift的tutor中,java sample code的build.xml中指明了要在/usr/local/lib找到这个jar文件)。
然后把/usr/local/lib/libthrift.jar也加入到CLASSPATH中。三。no class template named `tr1' in `std'
还是因为编译器老的原因,只有在gcc 4.3以后才加入了tr1,所以只能换成boost中的tr1,具体在头文件中加入
在<thrift>/lib/cpp/src/concurrency/ThreadManager.h 中改为
#include <boost/tr1/memory.hpp>
#include <boost/tr1/functional.hpp>
就行了在MacOS中使用参考:
http://wiki.apache.org/thrift/ThriftUsageObjectiveC
/数据类型
* Base Types:基本类型 bool,byte,i16,i32,i64,double,string(UTF-8 编码)
* Struct:结构体类型
* Container:容器类型,即List、Set、Map
* Exception:异常类型
* Service: 定义对象的接口,和一系列方法一个server只允许定义一个接口服务。这样的话多个接口需要多个server。这样会带来资源的浪费。同意通过继承接口的方式。
协议
Thrift可以让你选择客户端与服务端之间传输通信协议的类别,在传输协议上总体上划分为文本(text)和二进制(binary)传输协议, 为节约带宽,提供传输效率,一般情况下使用二进制类型的传输协议为多数,但有时会还是会使用基于文本类型的协议,这需要根据项目/产品中的实际需求:
* TBinaryProtocol – 二进制编码格式进行数据传输。
* TCompactProtocol – 这种协议非常有效的,使用Variable-Length Quantity (VLQ) 编码对数据进行压缩。
* TJSONProtocol – 使用JSON的数据编码协议进行数据传输。
* TSimpleJSONProtocol – 这种节约只提供JSON只写的协议,适用于通过脚本语言解析
* TDebugProtocol – 在开发的过程中帮助开发人员调试用的,以文本的形式展现方便阅读。传输层
* TSocket- 使用堵塞式I/O进行传输,也是最常见的模式。
* TFramedTransport- 使用非阻塞方式,按块的大小,进行传输,类似于Java中的NIO。
* TFileTransport- 顾名思义按照文件的方式进程传输,虽然这种方式不提供Java的实现,但是实现起来非常简单。
* TMemoryTransport- 使用内存I/O,就好比Java中的ByteArrayOutputStream实现。
* TZlibTransport- 使用执行zlib压缩,不提供Java的实现。服务端类型
* TSimpleServer - 单线程服务器端使用标准的堵塞式I/O。
* TThreadPoolServer - 多线程服务器端使用标准的堵塞式I/O。
* TNonblockingServer – 多线程服务器端使用非堵塞式I/O,并且实现了Java中的NIO通道。
当服务器端使用socket协议时,可以用simple|thread-pool|threaded|nonblocking等方式运行,从而获得更好的性能。基本使用
thrift的类型有如下几种:
/**
* The first thing to know about are types. The available types in Thrift are:
*
* bool Boolean, one byte
* byte Signed byte
* i16 Signed 16-bit integer
* i32 Signed 32-bit integer
* i64 Signed 64-bit integer
* double 64-bit floating point value
* string String
* binary Blob (byte array)
* map<t1,t2> Map from one type to another
* list<t1> Ordered list of one type //对应C++中的vector<t1>
* set<t1> Set of unique elements of one type
*
* Did you also notice that Thrift supports C style comments?
*/例子
编写角本service.thrift
/**
* This Thrift file can be included by other Thrift files that want to share
* these definitions.
*/
namespace cpp shared
//namespace java shared
//namespace perl shared
struct SharedStruct {
1: i32 key
2: string value
}//定义一个结构体
//定义一个服务
service SharedService {
SharedStruct getStruct(1: i32 key)
}使用下面的语句,生成cpp骨架文件
thrift –r –gen cpp service.thrift
(生成php骨架文件: # thrift –r –gen php service.thrift )生成7个文件,分别是由service.thrift脚本定义的类型文件四个,两个.h文件 (service_constants.h,service_types.h),两个对应的.cpp文件 (service_constants.cpp,service_types.cpp)。service_types对应的文件中,定义了对应的由 service.thrift脚本定义的类型。例如struct SharedStruct对应到一个类。另外三个文件分别是由service.thrift脚本中所定义的服务相关的文件,分别是 SharedService .h,SharedService .cpp,以及SharedService_server.skeleton.cpp 骨架文件,我们只需要修改SharedService_server.skeleton.cpp 骨架文件中相关的接口部分的逻辑,即可生成对应的服务。
///
进入cpp目录下,执行make命令,如果编译出错,第一个错误是/usr/local/include/thrift/protocol/TBinaryProtocol.tcc:147:35: error: there are no arguments to ‘htons’ that depend on a template parameter, so a declaration of ‘htons’ must be available则修改Makefile,加上编译选项-DHAVE_NETINET_IN_Hserver: CppServer.cppg++ -DHAVE_NETINET_IN_H -o CppServer -I${THRIFT_DIR} -I${BOOST_DIR} -I../gen-cpp -L${LIB_DIR} -lthrift CppServer.cpp ${GEN_SRC}
转载于:https://www.cnblogs.com/lexus/archive/2013/01/21/2870595.html
编译thrift和使用 - 翱翔云颠的博客 - 我的搜狐相关推荐
- 使用Azure云原生构建博客是怎样一种体验?(下篇)
点击上方蓝字关注"汪宇杰博客" 接上篇<使用Azure云原生构建博客是怎样一种体验?(上篇)> DNS Azure DNS 是一套分布全球的域名解析服务.具有超高可用性 ...
- 腾讯云部署hexo博客系统
腾讯云部署hexo博客系统 1. 云服务器端配置 git 1. 安装依赖库和编译工具 安装依赖库: yum install curl-devel expat-devel gettext-devel o ...
- 腾讯云cos html,Docsify+腾讯云对象存储 COS,一键搭建云上静态博客
最近一直在想如何利用 COS 简化静态博客的搭建过程.搜了很多的静态博客搭建过程,发现大部分的静态博客都要通过编译才能生成静态页面.功夫不负有心人,终于让我找到了一个超简洁博客的搭建方法. 效果预览 ...
- 阿里云搭建个人博客(workpress)
阿里云搭建个人博客,此篇文章介绍的搭建的博客为workpress,在阿里云的官网上也有介绍怎样搭建workpress的详细教程,但此篇文章介绍的是如何通过Docker来搭建workpress,了解过D ...
- 博客 学院 下载 GitChat 论坛 问答 商城 头条 活动 码云 ITeye 写博客
博客 学院 下载 GitChat 论坛 问答 商城 头条 活动 码云 ITeye 写博客 发Chat 登录注册 常见8种算法总结 转载 2017年03月16日 22:23:43 目录 冒泡排序 鸡尾酒 ...
- 腾讯云搭建hexo博客
title: 腾讯云搭建hexo博客 tags: hexo,腾讯云 文章目录 title: 腾讯云搭建hexo博客 tags: hexo,腾讯云 @[toc] 1. 腾讯云 学生认证购买 重置密码和网 ...
- 基于hexo和aws云搭建个人博客,0基础0费用,有点豪横(2W字超详细图文教程)
这是篇概述文章,详细参考Hexo建站专栏 最近几个月一直在整理之前的技术笔记,目前虽在体系上还尚有欠缺,但内容方面整理的七七八八了,这些内容一部分记录在了云笔记中另一部分记录在了博客上.于是决定搭建一 ...
- 使用Azure云原生构建博客是怎样一种体验?(上篇)
点击上方蓝字关注"汪宇杰博客" 导语 https://edi.wang 我的网站是在.NET Core 平台上使用 C#语言编写的开源博客系统,运行于微软智慧云 Azure 国际版 ...
- 电信天翼云搭建Halo博客
电信天翼云搭建Halo个人博客 1.购买服务器 学生党错过双十一各大云厂商搞活动,想在趁着年末各大云厂商搞活动租个一年的服务器,浏览阿里云.腾讯云.百度智能云.华为云.七牛云.天翼云等各大网站后,发现 ...
- 阿里云部署hexo博客之旅
hexo+阿里云(centos7.x)+git 前言 由于之前的服务器到期了没续费,忘记备份转移了所以资源都没有了,还好本机有一些,之后会上传的只能重新写了 拥有个人的博客是每个程序员的想法,我也一样 ...
最新文章
- HTML中的一些知识点
- Gradle 修改 Maven 仓库地址(阿里镜像)
- PHP魔法函数性能分析
- python 获取本地视频信息_python获取视频文件信息
- 克服跨洋网络延迟,使用Docker Hub Mirror加速Docker官方镜像下载
- dep指定版本 go_Go 包管理工具-dep
- 转dmg 到iso。。。
- 关于三极管的理解---根据IC符号简易迅速判断三极管导通情况
- 我本可以忍受黑暗,如果我不曾见过太阳。
- mock server 挡板服务搭建
- Spark四大组件包括Spark Streaming、Spark SQL、Spark MLlib和Spark GraphX。
- css button阴影效果,css怎么给button设置阴影
- CF游戏技巧→永久炫彩昵称
- 【Python语言基础】——Python NumPy 数组索引
- 鱼搜_鱼搜官网_鱼搜搜索_http://www.7yusou.com
- 追逐梦想——毕业4年小记
- 新(小)手(白)如何成为初级WebGIS开发工程师?(转)
- 使用组策略禁止远程桌面资源重定向
- 安卓手机怎么设置禁止使用流量_安卓手机流量使用警告提醒关闭方法
- 关于队里面最菜的在博客打卡第三十九天这件事