Thrift的安装和简单演示样例
本文仅仅是简单的解说Thrift开源框架的安装和简单使用演示样例。对于具体的解说,后面在进行阐述。
Thrift简述
Thrift是一款由Fackbook开发的可伸缩、跨语言的服务开发框架,该框架已经开源而且增加的Apache项目。Thrift主要功能是:通过自己定义的Interface Definition Language(IDL),能够创建基于RPC的client和服务端的服务代码。服务代码的生成是通过Thrift内置的代码生成器来实现的。Thrift的跨语言性体如今,它能够生成C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript,
Node.js, Smalltalk, OCaml , Delphi等语言的代码,且它们之间能够进行透明的通信。
Thrift的安装
安装版本号为:Thrift v0.9.1
系统版本号:Ubuntu 14.04 64位
基本安装环境:
- g++ 4.2
- boost 1.53.0
- libssl-dev
- libevent & libevent-dev(不是必须的,支持TNonblockingServer须要)
Thrift的编译器即代码生成器是由C++编写的,所以须要g++来进行编译安装,且Thrift源代码中用到了boost库中相关实现,比如shared_ptr。所以要事先安装boost库。
Thrift通信过程中使用ssl对数据进行安全保护,假设没有安装该库,会在configure时出现configure: error: "Error: libcrypto required."
Thrift提供了。TThreadSever, TThreadPoolServer, TNonblockingServer四种server框架,TSimpleServer以单一主线程堵塞的方式进行事件处理。TThreadPoolServer以多线程堵塞的方式提供服务。TNonblockingServer以多线程非堵塞方式工作。
TNonblockingServer服务模型的使用须要事先安装libevent。libevent-dev库,libevent是异步事件处理的网络库,其底层通过系统支持的I/O
multiplexer :poll,select,epoll等进行事件监听和分发。
安装步骤:
$./configure
$make
#sudo make install
configure的结果最后一部分例如以下。当中Build TNonblockingServer .. : yes的结果对于使用异步的server模型是必须的。
anonymalias@anonymalias-Rev-1-0:~/download/thrift-0.9.1$./configure
......
thrift 0.9.1 Building C++ Library ......... : yes
Building C (GLib) Library .... : no
Building Java Library ........ : no
Building C# Library .......... : no
Building Python Library ...... : yes
Building Ruby Library ........ : no
Building Haskell Library ..... : no
Building Perl Library ........ : no
Building PHP Library ......... : no
Building Erlang Library ...... : no
Building Go Library .......... : no
Building D Library ........... : no C++ Library:
Build TZlibTransport ...... : yes
Build TNonblockingServer .. : yes
Build TQTcpServer (Qt) .... : no Python Library:
Using Python .............. : /usr/bin/python If something is missing that you think should be present,
please skim the output of configure to find the missing
component. Details are present in config.log.
在本人电脑上make的时候会出现以下的bug,
ar: .libs/ThriftTest_constants.o: No such file or directory
不知道Makefile怎样生成的,导致上面这个编译文件路径有问题,解决方法有以下两种:
method1:
能够将已经编译的test/cpp/*.o拷贝到test/cpp/.libs后。继续编译就能够了
cp test/cpp/*.o test/cpp/.libs/ method2(未測试):
直接从Github(git://git.apache.org/thrift.git)上git clone 源代码,先执行./bootstrap.sh。在依照configure安装。
Thrift的简单演示样例
首先创建Thrift的语法规则文件,命名为server.thrift,内容例如以下:
struct message
{
1:i32 seqId,
2:string content
} service serDemo
{
void put(1:message msg)
}
在shell以下运行运行:
thrift -gen cpp server.thrift
该语句用于创建c++服务框架,创建成功后会在该文件夹下生成gen-cpp文件夹,然后改动该文件夹下的serDemo_server.skeleton.cpp,在put函数中加入例如以下代码:
class serDemoHandler : virtual public serDemoIf {
public:
serDemoHandler() {
// Your initialization goes here
} void put(const message& msg) {
// Your implementation goes here
printf("receive message: id: %d, content: %s\n", msg.seqId, msg.content.c_str());
}
然后进行编译就能够了:g++ -o server *.cpp -lthrift
上面是server框架的代码,对于client的框架事实上已经创建。可是如今须要加入client运行代码,能够在该文件夹下创建client.cpp,然后输入以下内容,以下的内容能够作为SimpleServer的client的模板,仅仅需改动凝视的部分。
// -------------------------替换成相应service名字的.h 文件------------------------
#include "SerDemo.h"
//------------------------------------------------------------------------------
#include <thrift/transport/TSocket.h>
#include <thrift/transport/TBufferTransports.h>
#include <thrift/protocol/TBinaryProtocol.h> 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<TSocket> socket(new TSocket("localhost", 9090));
boost::shared_ptr<TTransport> transport(new TBufferedTransport(socket));
boost::shared_ptr<TProtocol> protocol(new TBinaryProtocol(transport)); transport->open(); // ----------------------------我们的代码写在这里------------------------------
message msg;
msg.seqId = 1;
msg.content = "client message"; serDemoClient client(protocol);
client.put(msg);
//-------------------------------------------------------------------------- transport->close(); return 0;
}
然后进行编译:g++ -o client *[^n].cpp - lthrift,也能够将serDemo_server.skeleton.cpp移动到其他文件夹,使用g++ -o client *.cpp - lthrift命令。
然后就能够运行了。启动server后。启动client。server运行例如以下:
anonymalias@anonymalias-Rev-1-0:~/code/thriftSerDemo/gen-cpp$ ./server
receive message: id: 1, content: client message
下周打算翻译Thrift Whitepaper,come on!
Thrift的安装和简单演示样例的更多相关文章
- [hadoop系列]Pig的安装和简单演示样例
inkfish原创,请勿商业性质转载,转载请注明来源(http://blog.csdn.net/inkfish ).(来源:http://blog.csdn.net/inkfish) Pig是Yaho ...
- Libevent 学习笔记 (1)——Libevent 2.0安装与简单演示样例
今天開始学习Libevent . Libevent 是开源社区的一款高性能I/O框架库. 主要特点有: 1 跨平台. 2 统一事件源 3 线程安全 4 基于Reactor 今天主要进行了Libeven ...
- Introspector(内省)简单演示样例 与 简单应用
简单演示样例: package com.asdfLeftHand.test; import java.beans.BeanDescriptor; import java.beans.BeanInfo; ...
- JBoss 系列九十六:JBoss MSC - 简介及一个简单演示样例
什么是 JBoss MSC JBoss MSC 即 JBoss Modular Service Container,是第三代 JBoss 产品 JBoss 7和WildFfly的内核,JBoss MS ...
- 一则简单演示样例看Oracle的“无私”健壮性
Oracle的强大之处就在于他能总帮助让你选择正确的运行计划,即使你给了它错误的指示. 实验: 1. 创建測试表: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZ ...
- Android通过startService播放背景音乐简单演示样例
关于startService的基本使用概述及其生命周期可參见博客<Android中startService的使用及Service生命周期>. 本文通过播放背景音乐的简单演示样例,演示sta ...
- 百度地图 Android SDK - 检索功能使用的简单演示样例
百度地图 SDK 不仅为广大开发人员提供了炫酷的地图展示效果.丰富的覆盖物图层,更为广大开发人员提供了多种 LBS 检索的能力. 通过这些接口,开发人员能够轻松的訪问百度的 LBS 数据,丰富自己的移 ...
- RHEL5 X86-64上安装Oracle 11gR2演示样例与总结
进入Oracle DBA行业也有好几年了,可是说到安装Oracle的经验,我还真不是特别多,印象中刚開始每次安装都有点磕磕碰碰,随着接触Oracle的时间越来越长,各方面的原理.机制也都有一定的了解后 ...
- MyBatis对数据库的增删改查操作,简单演示样例
之前一直有用Hibernate进行开发.近期公司在使用Mybatis.依据网上的演示样例,做了一个简单的Demo,以便日后复习 使用XMl方式映射sql语句 整体结构例如以下图 watermark/2 ...
随机推荐
- Linux常见面试题
一.填空题:1. 在Linux系统中,以 文件 方式访问设备 .2. Linux内核引导时,从文件 /etc/fstab 中读取要加载的文件系统.3. Linux文件系统中每个文件用 索引节点来标 ...
- javascript封装id|class|元素选择器
由于各个浏览器都支持的选择方法只有如下三种: 1 document.getElementById() 2 document.getElementsByName() 3 document.getElem ...
- sql中视图视图的作用
视图是一个虚拟表,其内容由查询定义.同真实的表一样,视图包含一系列带有名称的列和行数据.但是,视图并不在数据库中以存储的数据值集形式存在.行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态 ...
- displaytag 简单使用流程
1. 首先导入包:displaytag-1.2.jar,commons-lang.jar和standard.jar;commons-beanutils.jar;这四个jar包 2. 然后在jsp页面做 ...
- Google推出iOS功能性UI测试框架EarlGrey
经过了一段时间的酝酿后,Google很高兴地宣布了EarlGrey,一款针对于iOS的功能性UI测试框架.诸如YouTube.Google Calendar.Google Photos.Google ...
- Emoji表情在网页中显示
最近遇到一个项目,客户手机上发送的表情要在电脑网页中显示,没有找到简便方法,于是有了以下方案. 由于Emoji表情传到后台是“口”,怎么找出接收数据中的表情是关键,各种搜索后,我用下面的正则表达式匹配 ...
- canvas ---1
Canvas1 (关键词:canvas) canvas :就是html5中提供的一个标签,只是用来展示绘图的内容 canvas 标签的默认宽高:300*150 如果给canvas来设置高度和宽度 ...
- C语言初学 测定各数据类型的长度
#include<stdio.h> #include<stdlib.h> int main() { int a,b; int i=0; printf("char:%d ...
- bzoj 2075: [POI2004]KAG
整天鬼畜题搞搞,感觉药丸…… 这种题出到xjoi模拟题里,太神了…… 这题的核心在于分割Cograph,尝试把Cograph的合成过程给求出来. 我们将这张图中的边为黑边,在这张图的补图中出现的边为白 ...
- (转)Linux监控工具
需要监控Linux服务器系统性能吗?尝试下面这些系统内置或附件的工具吧. 大多数Linux发行版本都装备了大量的监控工具,这些工具提供了能用作取得相关信息和系统活动的量度指标. 你能使用这些工具发现造 ...