天天看點

python thrift 服務端與用戶端使用

一、簡介

二、安裝

    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,如需轉載請自行聯系原作者