Thrift tutorial 演示 python服务端与客户端
本文的开发环境是windows 7 + python2.7.3
Thrift官方主页:http://thrift.apache.org/
先来这里下载thrift-0.9.1.tar.gz 和Thrift compiler for Windows (thrift-0.9.1.exe) 。thrift-0.9.1.exe是帮你编译好的,可以在windows下运行。
解压thrift-0.9.1.tar.gz
1.安装thrift库
先要安装thrift-0.9.1\lib\py里的库,python setup.py install 注意,在windows下安装不成功,需要用VC编译,还要对代码做相应修改,很麻烦,就不说了,直接在这里下载已经编译好的版本。http://www.lfd.uci.edu/~gohlke/pythonlibs/ (这里真的是个好地方,感谢大神)
2.Thrift生成代码
Thrift能够帮你生成一部分代码,让你更关注你的业务部分,而不必关注它是怎么通信的。thrift-0.7.0\tutorial,就是一个官方教程。tutorial.thrift,是thrift定义的语法,就是通过它来生成各种代码。

使用之前下载的thrift-0.7.0.exe,在thrift-0.7.0\tutorial目录下执行命令
thrift-0.7.0.exe -r -gen py -gen java tutorial.thrift
在当前文件夹就产生两个文件夹了,分别是gen-java和gen-py。gen-java咱暂时用不着,生成来玩的:)如果你想生成更多其他类型的代码,-gen xxx就可以了。
3.运行
在thrift-0.7.0\tutorial\py目录下运行PythonServer.py。看到Starting the server就证明你成功运行服务端了!
接下来,再运行客户端PythonClient.py,这时就可以看到服务端有信息输出时就可以看到服务端有信息输出 了~~成功!了~~成功!

Thrift tutorial 演示 java服务端与客户端【文末尾附jdk,ant以及tomcat(无关配置)配置说明】
Thrift Java的编译需要Ant。而且使用了一个特殊的包slf4j。并且在使用ant编译thrit的过程中,还需要下载一些依赖的Java库。所以最好,安装的机器上是可以访问Internet的。否则会非常麻烦。建议安装Ant的最新版本,否则,可能编译会有些错误,导致无法编译。在这里,我取的是最新的1.8.2.

1.安装Ant
下载apache-ant-1.8.2-bin.tar.gz
解压apache-ant-1.8.2-bin.tar.gz到/usr/local
则在/usr/local下会出现一个目录apache-ant-1.8.2
设置环境变量ANT_HOME
ANT_HOME=/usr/local/apache-ant-1.8.2
把路径/usr/local/apache-ant-1.8.2加入到系统的环境变量PATH中.

2.安装slf4j
下载slf4j-1.6.1.tar.gz
解压slf4j-1.6.1.tar.gz到/usr/local下
则在/usr/local下会出现一个目录slf4j-1.6.1
在系统的环境变量CLASSPATH中增加/usr/local/src/slf4j-1.6.1/slf4j-api-1.6.1.jar和/usr/local/slf4j-1.6.1/slf4j-simple-1.6.1.jar。我的CLASSPATH的内容如下:
./:/usr/local/slf4j-1.6.1/slf4j-api-1.6.1.jar:/usr/local/slf4j-1.6.1/slf4j-simple-1.6.1.jar

3.Ant使用代理服务器的配置
我的服务器上不能直接访问Internet,需要配置让ant来使用代理连接internet(实际上是ant在启动时,传给java虚拟机的参数)。如果你的机器不需要配置代理,可以直接连接internet,则可以跳过此步骤。

ant使用代理,通过配置环境变量ANT_OPTS来实现,比如:
export ANT_OPTS="-Dhttp.proxyHost=192.168.0.105 -Dhttp.proxyPort=3128"
这样设置告诉ant,在连接internet时,使用代理服务器192.168.0.105, 端口3128

5.编译thrift
cd thrift-0.2.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中。

6.编译tutorial
cd thrift-0.2.0/tutorial
thrift -r --gen java tutorial.thrift
这个时候会产生与tutorial.thrift对应的Java源代码
cd java
ant

在编译的时候,如果java的版本比较新的话,可能会产生一些错误,例如,在我的机器上,就报一些语法错误,我的是java 1.6.0

在我的机器上报的错误,有case Operation.ADD错误,原因是在新版本的java中,case语句里面用枚举值的时候,不需要在枚举常量前写上类的名称,直接用ADD即可。

另外一个错误是不允许吧枚举值复制给一个int值,例如io.what = work.op。可以改为io.what = work.op.ordinal()。

编译完成以后,JavaServer.class和JavaClient.class都会生成在当前目录下的build目录里,要执行的话,要进入这个目录,先运行java JavaServer,然后在另外一个终端上运行java JavaClient, 则应该看到JavaClient成功显示响应。

配置tomcat和java环境


一直配置不成功出现如下错误

解决后成功如下显示:

错误原因,配置的环境后加了分号。这是不正确的.
在eclipse中部署tomcat
从Window -> Preferences -> Server -> Runtime Environment,然后Add ->
选您的Tomcat版本-> Next -> Browse -> 选您的Tomcat路径->
Installed JREs -> 选您的JDK -> Finish。然后就可以从Window -> Show View -> Other 找到Servers ->
Server,这样您可以看到您刚刚设好的Tomcat。如果需要改Tomcat的设置,只要双击Tomcat,就可以看到配置的GUI。右键单击Tomcat可以启动Tomcat。

Ant简介与ant配置
1什么是ant
ant是构建工具

2什么是构建
概念到处可查到,形象来说,你要把代码从某个地方拿来,编译,再拷贝到某个地方去等等操作,当然不仅与此,但是主要用来干这个

3.ant的好处
跨平台 --因为ant是使用java实现的,所以它跨平台
使用简单--与ant的兄弟make比起来
语法清晰--同样是和make相比
功能强大--ant能做的事情很多,可能你用了很久,你仍然不知道它能有多少功能。当你自己开发一些ant插件的时候,你会发现它更多的功能。

4.ant的兄弟make
ant做的很多事情,大部分是曾经有一个叫make的所做的,不过对象不同,make更多应用于c/c++ ,ant更多应用于Java。当然这不是一定的,但大部分人如此。

5构建ant环境
要使用ant首先要构建一个ant环境,步骤很简单:
1),安装jdk,设置JAVA_HOME ,PATH ,CLASS_PATH(这些应该是看这篇文章的人应该知道的)
2),下载ant 地址http://www.apache.org/找一个你喜欢的版本,或者干脆最新的版本
3),解压ant 你得到的是一个压缩包,解压缩它,并把它放在一个尽量简单的目录,例如D:\ant-1.6虽然你不一定要这么做,但这么做是有好处的。
4),设置ANT_HOME,
PATH中添加ANT_HOME目录下的bin目录(我设置的:ANT_HOME:D:\apache-ant-1.8.2,PATH:%ANT_HOME%\bin)
5),测试一下你的设置,开始-->运行-->cmd进入命令行-->键入ant 回车,如果看到
Buildfile: build.xml does not exist!
Build failed
那么恭喜你你已经完成ant的设置

什么时候使用ant
也许你听到别人说起ant,一时冲动准备学习一下ant,当你看完了上边的第一个实例,也许你感觉ant真好,也许你感觉ant不过如此,得出这些结论都不能说错,虽然ant很好用,
但并不是在任何情况下都是最好的选择,例如windows上有更多更简单,更容易使用的工具,比如eclipse+myeclipse eclipse+wtp等等,无论是编译,部署,运行使用起来比ant更
容易,方便但有些情况则是ant发挥的好地方:
1,服务器上部署的时候
当你的程序开发完成,部署人员要部署在服务器上的时候,总不能因为因为安装一个程序就配置一个eclipse+myeclipse吧,ant在这个时候是个很好的选择,因为它小巧,容易配
置,你带着你写好的build.xml到任何一台服务器上,只需要做简单的修改(一些设定,例如目录),然后一两个命令完成,这难道不是一件美好的事情吗。
2,linux上,很多时候是这样的,程序开发是在windows下,但是程序要在linux或者unix上运行,在linux或者
在unix(特别是unix上)部署是个麻烦的事情,这个时候ant的特点又出来了,因为ant是跨平台的,你在build.xml可以在大多数操作系统上使用,基本不需要修改。

3,当服务器维护者不懂编程的时候
很多人都有过这样的经历,使用你们程序的人,并不懂得写程序。你得程序因为版本更新,因为修正bug需要一次又一次得重新部署。这个时候你会发现教一个人是如此得困难。但
是有ant后,你只需要告诉他,输入ant xxx等一两个命令,一切ok.
以上是我遇到得一些情况。
看完以上得情况,好好考虑一下,你是否需要使用ant,如果是继续。
进一步学习一个稍微复杂一点点的ant
在实际的工作过程中可能会出现以下一些情况,一个项目分成很多个模块,每个小组或者部门负责一个模块,为了测试,他们自己写了一个build.xml,而你负责把这些模块组合到
一起使用,写一个build.xml

这个时候你有两种选择:
1,自己重新写一个build.xml ,这将是一个麻烦的事情
2,尽量利用他们已经写好的build.xml,减少自己的工作
举个例子:
假设你下边有三个小组,每个小组负责一个部分,他们分别有一个src 和一个写好的build.xml
这个时候你拿到他们的src,你需要做的是建立三个文件夹src1 ,src2, src3分别把他们的src和build.xml放进去,然后写一个build.xml
<?xml version='1.0' encoding='UTF-8' ?>
<project name='main' default='build'
basedir='.'>
<property name='bin' value='${basedir}\bin' />
<property name='src1' value='${basedir}\src1'
/>
<property name='src2' value='${basedir}\src2'
/>
<property name='src3' value='${basedir}\src3'
/>
<target name='init'>
<mkdir dir='${bin}' />
</target>
<target name='run'>
<ant dir='${src1}' target='run' />
<ant dir='${src2}' target='run' />
<ant dir='${src3}' target='run' />
</target>
<target name='clean'>
<ant dir='${src1}' target='clean' />
<ant dir='${src2}' target='clean' />
<ant dir='${src3}' target='clean' />
</target>
<target name='build' depends='init,call'>
<copy todir='${bin}'>
<fileset dir='${src1}'>
<include name='*.jar' />
</fileset>
<fileset dir='${src2}'>
<include name='*.jar' />
</fileset>
<fileset dir='${src3}'>
<include name='*.jar' />
</fileset>
</copy>
</target>
<target name='rebuild' depends='build,clean'>
<ant target='clean' />
<ant target='build' />
</target>
</project>
ok你的任务完成了。

thrift笔记的更多相关文章

  1. Thrift笔记(七)--回调源码分析

    网上找了写代码,东拼西凑写了个demo.开始server用的是阻塞io,不行,换成非阻塞的io就可以.这里可能需要注意下 thrift文件 namespace java com.gxf.thrift ...

  2. Thrift笔记(六)--单端口 多服务

    多个服务,使用监听一个端口.先上一个demo Test.thrift namespace java com.gxf.thrift enum RequestType { SAY_HELLO, //问好 ...

  3. Thrift笔记(五)--Thrift server源码分析

    从(四)server代码跟进 public static void simple(MultiplicationService.Processor processor) { try { TServerT ...

  4. Thrift笔记(四)--Thrift client源码分析

    thrift文件 namespace java com.gxf.demo namespace py tutorial typedef i32 int // We can use typedef to ...

  5. Thrift笔记(三)--Thrift框架通信源码分析

    Thrift 客户端调用RPC的Demo public static void main(String[] args) throws Exception { TTransport transport ...

  6. Thrift笔记(二)--Thrift框架分层设计

    thrift架构设计使用了分层设计,类似TCP/IP分层,上次使用下层提供的服务.分层设计在计算机中是一个常用的设计,上层和下层定义好接口或者说协议,下层实现可以随意更换,只要实现好定义的接口和协议就 ...

  7. Thrift笔记(一)--Hello Demo

    Thrift是一个RPC框架 1. 用IDL定义好实体和服务框架,如实体字段名,类型等.服务名,服务参数,返回值等 2. 通过编译器或者说代码生成器生成RPC框架代码 IDL语法,代码生成器的安装使用 ...

  8. thrift学习笔记

    Thrift学习笔记 一:thrift介绍 Thrift是facebook开发的用来处理各不同系统之间数据通讯的rpc服务框架,后来成为apche的开源项目.thrift支持多种程序语言,包括Java ...

  9. thrift:swift项目笔记

    先声明:此swift不是Apple公司的那个swift开发语言,而是facebook的另一个开源项目. facebook的thrift IDL文件,如果默认用thrift -gen java生成jav ...

随机推荐

  1. Python AES - base64 加解密

    首先python引用AES加密 from Crypto.Cipher import AES 需要先安装  Crypto  模块, 可以使用 easy_install 进行安装   会自动去官网进行搜索 ...

  2. js最详细的基础,jquery 插件最全的教材

    一.Js的this,{},[] this是Javascript语言的一个关键字,随着函数使用场合的不同,this的值会发生变化.但是有一个总的原则,那就是this指的是调用的函数自己. { } 大括号 ...

  3. Touch ID 实现

    Touch ID 1.要求 机型:iPhone 5s以上 系统:iOS8以上 框架:#import <LocalAuthentication/LocalAuthentication.h> ...

  4. JHChart iOS图表工具库1.0.3新版本详解

    前言. 从2016年4月14日开始,本人着手开发了JHChart图表工具库.经过断断续续的开发,截止到现在,已经实现了折线图.柱状图.饼状图.环形图和表格样式的图表功能.为了方便使用,我已经将一个简单 ...

  5. Android笔记:蓝牙

    if (!BTAdapter.isEnabled()) { //没有打开,就启动确认窗口询问用户是否打开 Intent i = new Intent(BluetoothAdapter.ACTION_R ...

  6. Date、Calender类及日期和字符串转换

    Calendar是一个抽象类,抽象类java.util.Calendar 不可以通过new来获取一个实例,可以通过类方法getinstance()获取此类型的一个通用的对象 ①用法: Calendar ...

  7. iOS之滑动隐藏导航

    滑动隐藏导航狼栏 -(void)scrollViewDidScroll:(UIScrollView *)scrollView{ CGFloat offsetY = scrollView.content ...

  8. WPF 画心2.0版之元旦快乐

    2017年元旦已经到了,想做一个祝福语的窗口,就把上一篇画心的程序改了改,变成了如下界面. 说下改动的地方,首先窗口没有标题栏了. MainWindow.xaml AllowsTransparency ...

  9. ppmoney

    build/config.js 改 8080端口 build/webpack.dev.conf.js 改路径简写 alias:{ 'vux-components':'vux/dist/componen ...

  10. abstract与interface的区别

    abstract的用法: //通过abstract 关键字修饰的类叫抽象类. abstract class Animal { String name; String color; abstract p ...