- 浏览: 12051 次
最新评论
thrift 轻松实现多语言跨服务器通信
2010年12月25日
thrift是由facebook开发的轻量级跨语言的服务框架,现在已经移交到apache基金会下。和他类似的是google出的protocol buffer和ice。 thrift的一大优势就是支持的语言很丰富,它使用自己的IDL语言来描述服务接口和数据交换的格式。
官方网站:http://incubator.apache.org/thrift/
一、安装:
yum -y install gcc-c++ autoconf automake sysconftool boost \ boost-devel libtool perl-ExtUtils-MakeMaker gettext-base \ gettext gettext-devel liblocale-gettext-perl zlib-devel \ byacc bison flex pkgconfig python-devel wget http://apache.freelamp.com/incubator/thrift/0.2.0- incubating/thrift-0.2.0-incubating.tar.gz ./bootstrap.sh ./configure --prefix=/usr/local/thrift --with-ruby=no --with-erlang=no --with-java=no --with-csharp=no --enable-gen-java=no --enable-gen-csharp=no --enable-gen-rb=no --enable-gen-erl=no make make install
、IDL描述: # 1.支持的变量类型 类型 描述 bool #true, false byte #8位的有符号整数 i16 #16位的有符号整数 i32 #32位的有符号整数 i64 #64位的有符号整数 double#64位的浮点数 string#UTF-8编码的字符串 binary #字符数组 struct#结构体 list#有序的元素列表,类似于STL的vector set#无序的不重复元素集,类似于STL的set map#key-value型的映射,类似于STL的map exception #是一个继承于本地语言的exception基类 service #服务包含多个函数接口(纯虚函数) # 2.摘一段例子上来,让瞧瞧这是啥东东。(本例子文件名为:tutorial.thrift,是本身带的教程。) include "shared.thrift" namespace cpp tutorial namespace java tutorial namespace php tutorial namespace perl tutorial namespace smalltalk.category Thrift.Tutorial typedef i32 MyInteger const i32 INT32CONSTANT =9853const map MAPCONSTANT ={'hello':'world','goodnight':'moon'} enum Operation { ADD =1, SUBTRACT =2, MULTIPLY =3, DIVIDE =4} struct Work {1: i32 num1 =0,2: i32 num2,3: Operation op,4: optional string comment,} exception InvalidOperation {1: i32 what,2:string why } service Calculator extends shared.SharedService{ void ping(), i32 add(1:i32 num1,2:i32 num2), i32 calculate(1:i32 logid,2:Work w) throws (1:InvalidOperation ouch), oneway void zip() } # 3. 我们来写个 helloworld.thrift service HelloWorld{string ping(1:string name),string getpng(),}
三、编译 helloworld: 四、编写服务器端: 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 class HellowordHandler: def __init__ (self): pass def ping (self, name): print name +' from server.'return"%s from server."% name def getpng (self): f = open("./logo.png","rb") c = f.read() f.close()return c handler = HellowordHandler() processor = HelloWorld.Processor(handler) transport = TSocket.TServerSocket(9090) tfactory = TTransport.TBufferedTransportFactory() pfactory = TBinaryProtocol.TBinaryProtocolFactory() server = TServer.TSimpleServer(processor, transport, tfactory, pfactory) # You could do one of these for a multithreaded server#server = TServer.TThreadedServer(processor, transport, tfactory, pfactory)#server = TServer.TThreadPoolServer(processor, transport, tfactory, pfactory) print 'Starting the server...' server.serve() print 'done.'
五、编写客户端: open(); $a=$client->ping('xyq ');echo$a; $transport->close(); } catch (TException $tx){print'TException: '.$tx->getMessage()."\n";} ?>
按上面的流程就可以写自己的thrift了,我使用py做服务端,用php做客户端,当然也可以使用c++来做服务端。
发表评论
-
android HAL
2012-01-20 08:54 648android HAL 2010年07月06日 ... -
Android HAL 介绍
2012-01-20 08:54 606Android HAL 介绍 2010年11月18日 H ... -
一个智能的 Web 界面测试系统
2012-01-20 08:54 647一个智能的 Web 界面测试系统 2011年01月05日 ... -
Gis分析 POI空间聚合研究Demo实现
2012-01-20 08:54 1243Gis分析 POI空间聚合研究Demo实现 2010年06月 ... -
最全的FLEX网站收集分享
2012-01-19 13:59 308最全的FLEX网站收集分享 2010年07月30日 一、 ... -
最全的Flex网站,学Flex的好好收藏。
2012-01-19 13:58 519最全的Flex网站,学Flex的 ... -
Flash 、Flex 、HTML5
2012-01-19 13:58 501Flash 、Flex 、HTML5 2011年 ... -
Flash&Flex大全
2012-01-19 13:58 635Flash&Flex大全 2011年02月24日 ... -
Flex:路在何方
2012-01-19 13:58 497Flex:路在何方 2011年09月06日 Flex: ... -
电脑经验小总结(原创)
2012-01-17 03:48 628电脑经验小总结(原创) 2011年08月28日 ... -
2011-12-20
2012-01-17 03:48 5862011-12-20 2011年12月20日 ... -
安卓基础知识普及
2012-01-17 03:48 648安卓基础知识普及 2011 ... -
Memcached的安装
2012-01-17 03:48 552Memcached的安装 2011年12月29日 [b ... -
mac苹果系统 terminal终端功能使用方法
2012-01-17 03:48 1106mac苹果系统 terminal终端 ... -
日记,谁的日记
2012-01-16 02:24 571日记,谁的日记 2011年11 ... -
手机随想
2012-01-16 02:24 537手机随想 2011年12月05日 ... -
开心一笑
2012-01-16 02:23 606开心一笑 2010年01月15日 星期一到了……小英在交 ... -
孩子们,老师现在说的,你们能懂吗
2012-01-16 02:23 524孩子们,老师现在说的, ...
相关推荐
Golang通过Thrift框架完美实现跨语言调用
Apache Thrift——可伸缩的跨语言服务开发框架
Thrift Java 服务器 客户端通信,网上看到的,觉得不错就分享出来供大家一起共同分享学习。
thrift框架通过vs2013编译好的静态库,然后通过vs2013实现双向通信代码,通信协议利用openssl加密证书的方式来实现,本资源给出了完整的实现代码,证书可以在网上百度一下,看看如何生成客户端和服务端的,然后编译...
基于Thrift的跨编程语言Flex应用框架研究_吴洲.pdf
thrift是一种可伸缩的跨语言服务的发展软件框架。...thrift是facebook开发的,我们现在把它作为开源软件使用。...以作为输入文件,编译器生成代码用来方便地生成RPC客户端和服务器通信的无缝跨编程语言。
Thrift中实现Java与Python的RPC互相调用示例代码;Thrift中实现Java与Python的RPC互相调用示例代码;Thrift中实现Java与Python的RPC互相调用示例代码
thrift实现http协议案例,thrift官方好像就一个socket,此案例是通过继承servlet实现http协议通信
thrift特性、不支持的特性、对各个语言的支持情况、语法参考、Thrift 架构、协议、传输层、服务端类型、各种thriftServer实现的比较、Thrift对多接口服务的支持
Thrift RPC客户端的服务化框架代码,
一个Thrift的学习测试项目,服务器端实现从PLC进行采集数据,推送到Thrift,以接口的形式对外公开数据,方便客户端获取到服务器的不同数据,并且支持从客户端进行远程操控PLC
Thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈和...以作为输入文件,编译器生成代码用来方便地生成RPC客户端和服务器通信的无缝跨编程语言。 官网地址:thrift.apache.org
HARPC(High Availability RPC)是基于Thrift的跨语言、高可用的RPC框架。具备高性能、高可用、轻量级等特点 * 跨语言通信 * 方便的使Java、Python、C++三种程序可以相互通信 * 负载均衡和容灾处理 * 方便的实现...
Thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈和...以作为输入文件,编译器生成代码用来方便地生成RPC客户端和服务器通信的无缝跨编程语言。 官网地址:thrift.apache.org
然后运行 restart_thrift.sh 脚本就可以直接启动 ps 一下进程是否正常,如果错误请查看日志 然后就可以使用线下的php直接调用, 代码是从网上找到的,比较容易入门 当然也可以直接导入java目录下的java工程,直接运行...
一个简单的demo,关于使用thrift进行跨语言服务间的通信
1、支持thrift双向通信。
Thrift是一个跨语言的服务部署框架,最初由Facebook于2007年开发,2008年进入Apache开源项目。Thrift通过IDL(Interface Definition Language,接口定义语言)来定义RPC(Remote Procedure Call,远程过程调用)的...
精心整理,零基础开始学习,步骤详细!环境搭建,demo案例,楼主耗费两天奉献!
这个示例工程和我的博客《架构设计:系统间通信(13)——RPC实例Apache Thrift 下篇》(http://blog.csdn.net/yinwenjie/article/details/49869535)相对应。相关的设计和代码说明,请参见我的博客。另外,工程已经...