thrift笔记(未完成)

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

时间: 2024-10-16 03:44:46

thrift笔记(未完成)的相关文章

[SQL Server]内存缓存数据写入磁盘(一)首部曲

很少扎实的实践SQL Server Database Engine内部的行为,最近发现某个客户的性能瓶颈可能在Transaction log的I/O,同时另外一家客户正在导入保存厂商异地备援(DR site)的解决方案(不打算用AlwaysOn传送到异地),由于保护的是磁盘资源,我们需要确保磁盘上的mdf.ndf与ldf的一致性. 来笔记Buffer Flush To Disk读书心得以及SQL2012/2014/SQL2016相关的新古与全新功能. 维持ACID的完整性(Atomicity)及

【未完成】《统计机器翻译》读书笔记:系列0,全书概述与个人总结

说明:本系列文章是本人在阅读统计机器翻译后所做的个人读书笔记,会按照每一章的顺序来按章详细叙述内容总结和习题解答. 系列0:全书概述与个人总结 本书是大牛Philipp Koehn的作品,他是开源项目Moses项目的领导者,具体可以去www.statmt.org/moses/查看,我也会在未来的半个月写一些有关Moses学习的博文. 本书分为三个部分:基础知识(介绍机器翻译需要语言学的基础.概率论的基础).核心方法(基于词的翻译模型.基于短语的翻译模型.解码decoding).前沿研究 在绪论部

thrift学习笔记

Thrift学习笔记 一:thrift介绍 Thrift是facebook开发的用来处理各不同系统之间数据通讯的rpc服务框架,后来成为apche的开源项目.thrift支持多种程序语言,包括Java,Python,Ruby,JavaScript,Node.js,Go,C,C++,C#,Erlang,Delphi,Perl,Php,SmallTalk,OCaml,Haxe,Haskell,D语言.Thrift采用IDL(Interface Defination Language)描述性语言来定义

thrift学习笔记(一) thrift简介及第一个helloword程序

简介 facebook开源的RPC框架,秉承了Facebook一贯的只管拉屎不管擦屁股的作风. Thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发.它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 等等编程语言间无缝结合的.高效的服务. Thrift最初由facebook开

thrift php 使用参考笔记

转载请指明出处:http://www.cnblogs.com/lpit/p/4902292.html thrift 是什么东西,就不多说了 ,网上都有. 现在展示我做的API. 1. 安装thrift 后开始写代码. 环境: Linux version 2.6.18: Thrift version 0.9.3: PHP 5.5.9 : Python 2.4.3: 部署: server 端使用 php, client  端使用 php, 端口监控使用 python, 目录结构: 2.  展示代码:

Thrift学习笔记—IDL基本类型

thrift 采用IDL(Interface Definition Language)来定义通用的服务接口,并通过生成不同的语言代理实现来达到跨语言.平台的功能.在thrift的IDL中可以定义以下一些类型:基本数据类型,结构体,容器,异常.服务 1基本类型 bool: 布尔值 (true or false), one byte byte: 有符号字节 i16: 16位有符号整型 i32: 32位有符号整型 i64: 64位有符号整型 double: 64位浮点型 string: Encodin

Hibernate学习笔记(一):mycelipse建立项目流程(未完成)

1.部署数据库: 2.部署项目: 3.引入Hibernate: 4.url配置

Machine Learning for hackers读书笔记(三)分类:垃圾过滤(未完成)

#定义函数,打开每一个文件,找到空行,将空行后的文本返回为一个字符串向量,该向量只有一个元素,就是空行之后的所有文本拼接之后的字符串 #很多邮件都包含了非ASCII字符,因此设为latin1就可以读取非ASCII字符 #readLines,读取每一行作为一个元素 get.msg <- function(path){ con <- file(path, open = "rt") text <- readLines(con) # The message always be

sed 学习笔记(未完成)

#sed sed是一种流编辑器, 它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响. 处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕.接着处理下一行,这样不断重复,直到文件末尾.文件内容并没有 改变,除非你使用重定向存储输出. Sed主要用来自动编辑一个或多个文件:简化对文件的反复操作:编写转换程序等. #命令格式 sed [options] 'com