一、簡介
二、安裝
1.下載下傳位址
1
<code>http:</code><code>//www</code><code>.apache.org</code><code>/dyn/closer</code><code>.cgi?path=</code><code>/thrift/0</code><code>.9.2</code><code>/thrift-0</code><code>.9.2.</code><code>tar</code><code>.gz</code>
2.安裝
2
3
4
5
6
7
8
9
10
11
<code>[root@localhost ~]</code><code># yum -y groupinstall "Development Tools"</code>
<code>[root@localhost ~]</code><code># yum -y install libevent-devel zlib-devel openssl-devel autoconf automake</code>
<code>[root@localhost ~]</code><code># wget http://ftp.gnu.org/gnu/bison/bison-2.5.1.tar.gz </code>
<code>[root@localhost ~]</code><code># tar xf bison-2.5.1.tar.gz</code>
<code>[root@localhost ~]</code><code># cd bison-2.5.1</code>
<code>[root@localhost ~]</code><code># ./configure --prefix=/usr</code>
<code>[root@localhost ~]</code><code># make</code>
<code>[root@localhost ~]</code><code># make install</code>
<code>[root@localhost ~]</code><code># tar xf thrift-0.9.2.tar.gz </code>
<code>[root@localhost ~]</code><code># cd thrift-0.9.2</code>
<code>[root@localhost thrift-0.9.2]</code><code># ./configure -with-lua=no</code>
3.安裝python插件
<code>pip </code><code>install</code> <code>thrift</code>
三、準備伺服器端
1.編輯接口檔案 helloworld.thrift:
<code>service HelloWorld {</code>
<code> </code><code>string </code><code>ping</code><code>(),</code>
<code> </code><code>string say(1:string msg)</code>
<code>}</code>
2.編輯 server.py
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<code>#!/usr/bin/env python </code>
<code>import</code> <code>socket</code>
<code>import</code> <code>sys</code>
<code>sys.path.append(</code><code>'./gen-py'</code><code>) </code>
<code>from helloworld </code><code>import</code> <code>HelloWorld </code>
<code>from helloworld.ttypes </code><code>import</code> <code>*</code>
<code> </code><code>from thrift.transport </code><code>import</code> <code>TSocket</code>
<code> </code><code>from thrift.transport </code><code>import</code> <code>TTransport</code>
<code> </code><code>from thrift.protocol </code><code>import</code> <code>TBinaryProtocol</code>
<code> </code><code>from thrift.server </code><code>import</code> <code>TServer</code>
<code> </code><code>class HelloWorldHandler: </code>
<code> </code><code>def </code><code>ping</code><code>(self): </code>
<code> </code><code>return</code> <code>"pong"</code>
<code> </code><code>def say(self, msg):</code>
<code> </code><code>ret = </code><code>"Received: "</code> <code>+ msg </code>
<code> </code><code>print ret </code>
<code> </code><code>return</code> <code>ret</code>
<code>#建立服務端</code>
<code>handler = HelloWorldHandler()</code>
<code>processor = HelloWorld.Processor(handler)</code>
<code>#監聽端口</code>
<code>transport = TSocket.TServerSocket(</code><code>"localhost"</code><code>, 9090)</code>
<code>#選擇傳輸層</code>
<code>tfactory = TTransport.TBufferedTransportFactory()</code>
<code>#選擇傳輸協定</code>
<code>pfactory = TBinaryProtocol.TBinaryProtocolFactory()</code>
<code>#建立服務端 </code>
<code>server = TServer.TSimpleServer(processor, transport, tfactory, pfactory) </code>
<code>print </code><code>"Starting thrift server in python..."</code>
<code>server.serve()</code>
<code>print </code><code>"done!"</code>
四、準備用戶端
32
33
34
<code>#!/usr/bin/env python</code>
<code>sys.path.append(</code><code>'./gen-py'</code><code>)</code>
<code>from helloworld </code><code>import</code> <code>HelloWorld </code><code>#引入用戶端類</code>
<code>from thrift </code><code>import</code> <code>Thrift </code>
<code>from thrift.transport </code><code>import</code> <code>TSocket</code>
<code>from thrift.transport </code><code>import</code> <code>TTransport</code>
<code>from thrift.protocol </code><code>import</code> <code>TBinaryProtocol</code>
<code>try:</code>
<code> </code><code>#建立socket</code>
<code> </code><code>transport = TSocket.TSocket(</code><code>'localhost'</code><code>, 9090)</code>
<code> </code><code>#選擇傳輸層,這塊要和服務端的設定一緻</code>
<code> </code><code>transport = TTransport.TBufferedTransport(transport)</code>
<code> </code><code>#選擇傳輸協定,這個也要和服務端保持一緻,否則無法通信</code>
<code> </code><code>protocol = TBinaryProtocol.TBinaryProtocol(transport)</code>
<code> </code><code>#建立用戶端</code>
<code> </code><code>client = HelloWorld.Client(protocol)</code>
<code> </code><code>transport.</code><code>open</code><code>()</code>
<code> </code><code>print </code><code>"client - ping"</code>
<code> </code><code>print </code><code>"server - "</code> <code>+ client.</code><code>ping</code><code>()</code>
<code> </code><code>print </code><code>"client - say"</code>
<code> </code><code>msg = client.say(</code><code>"Hello!"</code><code>)</code>
<code> </code><code>print </code><code>"server - "</code> <code>+ msg</code>
<code> </code><code>#關閉傳輸</code>
<code> </code><code>transport.close()</code>
<code>#捕獲異常</code>
<code>except Thrift.TException, ex:</code>
<code> </code><code>print </code><code>"%s"</code> <code>% (ex.message)</code>
ps:親測通過,吐槽一下,這東西以前都沒有聽說過,就要拿來開發,還要隻是用用戶端
本文轉自wangfeng7399 51CTO部落格,原文連結:http://blog.51cto.com/wangfeng7399/1696108,如需轉載請自行聯系原作者