分享下我学习Thrift的入门例子helloworld,客户端用php,服务端用python:
2012-02-01 21:07
871 查看
分享下我学习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,测试
浏览器打开test.php,显示hello world!
架构图:
系统环境: 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!
相关文章推荐
- 分享下我学习Thrift的入门例子helloworld,客户端用php,服务端用python
- thrift例子:python客户端/java服务端
- netty学习九:(window7上)python客户端通过thrift调用java服务端
- windows基于Thrift的php客户端访问java的服务端
- [python&php 网络编程]完整的socket服务端客户端
- Python入门学习指南分享
- Python爬虫入门学习例子之煎蛋网(福利哦)
- python thrift搭建服务端和客户端测试程序
- Thrift学习笔记(6)--Spring集成Thrift,实现服务端和客户端代理
- RPC学习--C#使用Thrift简介,C#客户端和Java服务端相互交互
- 分享一个PHP写的简单webservice服务端+客户端
- netty入门学习(3)-客户端写消息,服务端应答
- Python爬虫入门学习例子之糗事百科
- PHP入门经历和学习过程分享
- 神级程序员大佬分享给python小白入门教程及学习路线,涨知识啦!
- 迟迟开始学习的网络编程,C语言客户端服务端,python客户端服务端和mini木马
- PHP入门学习实例代码,代码例子–PHP连接mysql数据库
- java学习总结——Apache thrift服务端与客户端的创建
- socket;ios客户端与php服务端交互(补充html5+python服务端+ios客户端)