分享下我學習Thrift的入門例子helloworld,用戶端用php,服務端用python:

來源:互聯網
上載者:User

分享下我學習Thrift的入門例子helloworld,用戶端用php,服務端用python:

架構圖:


系統內容: Centos 5.6

一、安裝Thrift

# yum -y install openssl-devel automake libtool flex bison pkgconfig gcc-c++ boost-devel libevent-devel zlib-devel python-devel
# ./configure –with-php=/usr/local/server/php –with-cpp –with-boost –without-csharp –without-java –without-erlang –without-perl –without-ruby –without-haskell –without-go
# make
# make install

注意:

手動編譯安裝的語言套件需要指定路徑 –with-php=/usr/local/server/php;

需要php5.2++
error:
No route to host [113]
檢查防火牆是否封了連接埠

二、安裝 Thrift PHP 擴充

# cd /usr/local/thrift/lib/php/src/ext/thrift_protocol
# phpize
# ./configure –enable-thrift_protocol
注意:如果你的 PHP 沒有安裝到預設位置,則應該添加 –with-php-config=/(PHP 的 bin 目錄)/php-config
# make
# make install

修改 php.ini,添加extension=thrift_protocol.so

三、安裝 Python 模組
cd lib/py
python setup.py build
python setup.py install

ImportError: No module named ttypes
可能是模組名衝突

四、編寫helloworld.thrift,根據IDL產生代碼

service HelloWorld {
string sayHello()
}

為用戶端產生代碼:thrift –gen php helloworld.thrift
為服務端產生代碼:thrift –gen py helloworld.thrift

注意:server用php,產生的命令是 thrift –gen php:server helloworld.thrift

五、將產生的程式碼拷貝一份到用戶端
Note: You need to comment out the line “include_once $GLOBALS['THRIFT_ROOT'].’/packages/helloworld/helloworld_types.php’;” from file gen-php/helloworld/HelloWorld.php

六、編寫服務腳步test.py,後台運行

#!/usr/bin/env python

import sys
sys.path.append(‘../gen-py’)

from helloworld import HelloWorld
from helloworld.ttypes import *

from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol
from thrift.server import TServer

import socket

class HelloWorldHandler:
def __init__(self):
self.log = {}

def sayHello(self):
print “sayHello()”
return “hello world ”

handler = HelloWorldHandler()

processor = HelloWorld.Processor(handler)
transport = TSocket.TServerSocket(’127.0.0.1′,393939)
tfactory = TTransport.TBufferedTransportFactory()
pfactory = TBinaryProtocol.TBinaryProtocolFactory()

server = TServer.TSimpleServer(processor, transport, tfactory, pfactory)

print “Starting python server…”
server.serve()

# python test.py

七、編寫用戶端指令碼test.php,測試

$GLOBALS['THRIFT_ROOT'] = '../thrift/';require_once $GLOBALS['THRIFT_ROOT'].'/Thrift.php';require_once $GLOBALS['THRIFT_ROOT'].'/protocol/TBinaryProtocol.php';require_once $GLOBALS['THRIFT_ROOT'].'/transport/TSocket.php';require_once $GLOBALS['THRIFT_ROOT'].'/transport/THttpClient.php';require_once $GLOBALS['THRIFT_ROOT'].'/transport/TBufferedTransport.php';// Your gen-php dir$GEN_DIR = '../gen-php';require_once $GEN_DIR . '/helloworld/HelloWorld.php';require_once $GEN_DIR . '/helloworld/helloworld_types.php';// Set server host and port$host = "127.0.0.1";$port = 393939;try {//Thrift connection handling$socket = new TSocket( $host , $port );$transport = new TBufferedTransport($socket, 1024, 1024);$protocol = new TBinaryProtocol($transport);// get our example client$client = new HelloWorldClient($protocol);$transport->open();// Get current timestamp from server$return = $client->sayHello();echo $return;$transport->close();} catch (TException $tx) {print 'Something went wrong: '.$tx->getMessage()."\n";}

瀏覽器開啟test.php,顯示hello world!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.