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你的任务完成了。