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你的任務完成了。
新聞熱點
疑難解答