设为首页 收藏本站
查看: 782|回复: 0

[经验分享] 分享下我学习Thrift的入门例子helloworld,客户端用php,服务端用python:

[复制链接]

尚未签到

发表于 2015-10-26 13:05:21 | 显示全部楼层 |阅读模式
  分享下我学习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!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-130989-1-1.html 上篇帖子: python操作excel之xlrd 下篇帖子: unable to find a python 2.x interpreter xxxxxx
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表