`
ipjmc
  • 浏览: 707053 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Apache Thrift 学习第二篇(安装&试用)

阅读更多
    这一篇,我们来试着安装Thrift,并运行Thrift自带的例子,以对Thrift有个感性的认识。

一、下载

    从官网下载最新版:http://thrift.apache.org/,在写这篇博客的时候,最新版稳定版是0.8.0。官网给的有安装教程以及系统要求,可参照http://thrift.apache.org/docs/install/,上面有各种系统下的编译安装方法。由于我的系统是ubuntu,所以就把ubuntu下thrift的编译安装教程放到这里。

    首先,在ubuntu上,系统需要需要有如下组件:


sudo apt-get install libboost-dev libboost-test-dev libboost-program-options-dev libevent-dev automake libtool flex bison pkg-config g++ libssl-dev


     如果没有JDK的话,还需要安装JDK。JDK的安装就不再细说了。

    然后,如果Thrift支持下面的语言的的话还需要安装一些额外的包:

    Ruby

    ruby-full ruby-dev librspec-ruby rake rubygems libdaemons-ruby libgemplugin-ruby mongrel

    Python

    python-dev python-twisted

    Php

    php5-dev php5-cli

    C_glib

    libglib2.0-dev

    Erlang

    erlang-base erlang-eunit erlang-dev

    Haskell

    ghc6 cabal-install libghc6-binary-dev libghc6-network-dev libghc6-http-dev

二、源码的编译与安装

   #需要指定Boost库的位置,在我的机器上是/usr/include
   ./configure --with-boost=/usr/include
   make -j 4 #4核编译
   make install


    如果编译有错误的话,请参照http://thrift.apache.org/docs/BuildingFromSource/

三、运行示例程序

    Thrift支持多种语言之间通信,一个作为服务器,另一个作为客户端,在示例程序中我们可以选择Python和Php,用Python作为服务器,Php作为客户端。下载的源码中自带示例程序,源码目录下面有个tutorial目录,里面有README,可以查看说明。使用方法如下:


    cd tutorial
    #我们用自带的例子生成Python和Php代码,下面两行代码执行后会创建目录gen-py和gen-php,里面有生成的代码。
    thrift -r --gen py tutorial.thrift
    thrift -r --gen php:namespace tutorial.thrift


    tutorial里面已经有了现成的服务器代码,tutorial/py/PythonServer.py。但是在Thrift 0.8.0里面,这个代码是有问题的,需要修改

    第84行,

    transport = TSocket.TServerSocket(9090)

    修改为transport = TSocket.TServerSocket(port = 9090)

    否则,运行的时候会报错,TypeError: getaddrinfo() argument 1 must be string or None。而且我们在运行的时候,最好要先进入目录tutorial/py,然后以./PythonServer.py方式运行,否则由于PYTHONPATH的问题,还会有错误ImportError: No module named tutorial。当然也有其他解决办法,解决方法看这里

    在运行PHP客户端之前,我们还有一些其他工作要做,建议这样配置:


    cd tutorial/php
    cp -r ../../lib/php/src/ ./
    cp -r ../gen-php ./src/packages/


    修改下面两行代码

$GLOBALS['THRIFT_ROOT'] = './src';
$GEN_DIR = $GLOBALS['THRIFT_ROOT'].'/packages';

    修改成功后运行Php客户端./php PhpClient.php
    如果出现找不到类的话,需要注意PHP命名空间的使用。


四、使用C++服务器

     使用C++做服务器需要安装C++ lib,修改Makefile文件,参照wiki

http://wiki.apache.org/thrift/ThriftUsageC%2B%2B

       安装C++ lib的方法是:


cd thrift-0.8.0/lib/cpp/
make
sudo make install
sudo /sbin/ldconfig -v


    上面的第4步是更新系统lib库的,让系统库包含/usr/local/lib,否则运行C++ Server的时候,找不到libthrift-0.8.0.so。参考链接:http://blog.csdn.net/shendl/article/details/5746062

    下一步是更新Makefile文件, 可以参考我的Makefile(Wiki上也有更详细的说明),

    我的Makefile文件如下:


#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#

BOOST_DIR := /usr/include
THRIFT_DIR := /usr/local/include/thrift
LIB_DIR := /usr/local/lib

GEN_SRC := ./gen-cpp/SharedService.cpp ./gen-cpp/shared_types.cpp ./gen-cpp/tutorial_types.cpp ./gen-cpp/Calculator.cpp
GEN_OBJ := $(patsubst %.cpp, %.o, $(GEN_SRC))

INC = -I$(THRIFT_DIR) -I$(BOOST_DIR)
.PHONY: all clean

all: server client

%.o: %.cpp
 $(CXX) -Wall -DHAVE_INTTYPES_H -DHAVE_NETINET_IN_H $(INC) -c $< -o $@

server: CppServer.o $(GEN_OBJ)
 $(CXX) $^ -o $@ -L$(LIB_DIR) -lthrift

client: CppClient.o $(GEN_OBJ)
 $(CXX) $^ -o $@ -L$(LIB_DIR) -lthrift

clean:
 $(RM) *o server client

0
4
分享到:
评论

相关推荐

    the programmer's guide to apache thrift

    Apache Thrift is an open source cross language serialization and RPC framework. With support for over 15 programming languages, Apache Thrift can play an important role in a range of distributed ...

    Apache Thrift 使用说明

    在 Windows 系统下安装 Thrift,可能需要下载预编译的二进制包或自行编译。过程类似于 Ubuntu,但可能涉及到 Visual Studio 或其他编译工具,例如 MSBuild。Windows 下的配置步骤可能有所不同,例如指定编译器路径等...

    Apache Thrift 初学小讲(五)【代理】

    在"Apache Thrift 初学小讲(五)【代理】"这篇博文中,我们将探讨Thrift如何实现代理服务,这在分布式系统中非常关键,因为代理可以提供负载均衡、安全控制、监控等功能。 1. **接口定义语言(IDL)**:Thrift ...

    Apache Thrift 初学小讲(七)【负载均衡】

    在本篇初学小讲中,我们将重点关注Thrift在负载均衡方面的应用,这对于构建大型分布式系统至关重要。Thrift通过提供一种高效的数据序列化机制以及RPC(远程过程调用)接口,使得不同编程语言之间可以轻松地进行通信...

    Learning Apache Thrift

    Apache Thrift 是一个开源的软件框架,用于构建可伸缩的、跨语言的服务。它结合了编译器、协议和库,使得开发人员能够轻松地定义数据类型和服务接口,然后在多种编程语言之间进行高效通信。这个框架最初由Facebook...

    Apache Thrift 初学小讲(六)【spring】

    Apache Thrift 是一个开源的软件框架,用于构建可伸缩的、跨语言的服务。它结合了接口定义语言(IDL)和编译器,允许开发者定义服务接口,然后自动生成多种编程语言的代码,使得在不同语言之间进行高效的数据序列化...

    ThriftBook:《 Apache Thrift程序员指南》中示例的源代码

    第二部分-编程Apache Thrift 本部分深入研究Apache Thrift框架的每一层,详细检查传输,协议,类型,服务,服务器和Apache Thrift接口定义语言。 这些章节中的示例使用C ++,Java和Python作为演示语言。 C ++示例...

    Apache Thrift Java实战源码,包含了客户端和服务端源码

    Apache Thrift 是一款开源的软件框架,主要用于构建可扩展且跨语言的服务。它结合了编译器和库,能够高效地构建分布式系统。在Java领域,Thrift 提供了一种简洁的方式来实现远程过程调用(RPC)服务。在这个实战源码...

    用C#和C++写的Apache Thrift的小范例

    本例改编自Apache Thrift教程: http://mikecvet.wordpress.com/2010/05/13/apache-thrift-tutorial-the-sequel/ http://chanian.com/2010/05/13/thrift-tutorial-a-php-client/ 原教程使用的是c++ server和...

    Apache Thrift——可伸缩的跨语言服务开发框架

    Apache Thrift——可伸缩的跨语言服务开发框架 Apache Thrift 是 Facebook 实现的一种高效的、支持多种编程语言的远程服务调用框架。它采用接口描述语言定义并创建服务,支持可扩展的跨语言服务开发,所包含的代码...

    基于SpringBoot的Apache Thrift RPC框架实践设计源码

    该项目是《RPC框架实践之:Apache Thrift》博文所对应的实践设计源码,总计包含30个文件,其中Java源文件8个,XML配置文件3个,属性文件2个,以及其他文件如DS_Store、LICENSE和md等。该项目通过SpringBoot整合...

    mac thrift 0.9.3安装

    mac 想安装低版本thrift 0.9.3太难了,高版本比较简单 直接执行 brew install thrift.rb 即可安装

    Apache Thrift - 可伸缩的跨语言服务开发框架(代码已修正)

    Apache Thrift 是一个开源的跨语言服务开发框架,它由Facebook于2007年创建,现由Apache软件基金会维护。Thrift的主要目标是解决在分布式系统中不同编程语言之间高效、安全的数据通信问题。通过Thrift,开发者可以...

    Apache Thrift 初学小讲(三)【http】

    Apache Thrift 是一个开源的软件框架,用于构建可伸缩的、跨语言的服务。它通过定义一种中间表示(IDL,接口定义语言),允许开发者在多种编程语言之间轻松地构建服务。在“Apache Thrift 初学小讲(三)【http】”...

    fbthrift:Facebook的Apache Thrift分支,包括一个新的C ++服务器

    FacebookThrift最初是紧跟Apache Thrift发行的,但现在朝着新的方向发展。 特别是,编译器是从头开始重写的,新的实现具有完全异步的Thrift服务器。 在了解有关这些改进的。 您还可以在原始的Facebook Code 了解...

    thrift安装

    Thrift是一种开源的跨语言服务开发框架,由Facebook于2007年开源,现在由Apache软件基金会维护。它的主要功能是定义数据结构和服务接口,然后自动生成多种编程语言的代码,实现这些接口,使得不同语言之间可以进行...

    thrift实例以及所需jar包

    Apache Thrift是一个开源的软件框架,它用于构建跨语言的服务。这个实例包含了Thrift的使用方法和必要的库文件,帮助开发者在不同的编程语言之间实现高效、简洁的数据通信。Thrift通过定义一种中间表示(IDL,...

Global site tag (gtag.js) - Google Analytics