thrift小试牛刀

原创 2011年01月25日 13:13:00

在Apache上http://thrift.apache.org/,thrift如是简单的介绍了自己:Thrift is a software framework for scalable cross-language services development. It combines a software stack with a code generation engine to build services that work efficiently and seamlessly between C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk, and OCaml.

 

在首页上也给出了一个不那么完整的例子,由于最近项目将使用thrift,所以就把这个例子拿来研究了一翻,这里就是自己初学thrift的一点笔记罢了,还望高人指点。

 

通过thrift搭建网络应用的第一步都是协议的设计;因此,首先我创建了一个user.thrift的文件,文件内容如下:

 

这次学习thrift主要是采用的C++,也会涉及一点python编写client,也许以后自己还会研究一下java吧。thrift的协议设计可以看成有两个部分组成,一个数据协议(此处的struct UserPorfile),另外一个就是接口方法(service UserStorage)了。通俗的说就是,client可以构造一个UserProfile的对象,这个对象包括了uid、name、blurb三个属性;然后,client就可以用构造的对象作为参数调用store方法,将这个对象存储到server端(也许是数据库中);除此之外,client还可以通过uid调用retrieve方法来获取具体的user对象。store和retrieve的实现是在服务端,client只管使用即可,就像本地方法一样,这就是RPC。

 

user.thrift文件编写好后,就可以具体的语言框架程序了,在这里我首先要生成一个C++的RPC框架程序出来,那么我就只需要执行如下命令即可:

 

如果是要生成python的框架执行命令:

 

 

这里我就只管C++了,因此最后将产生一个gen-cpp的目录,这个目录中有一堆c++源文件,这就是整个网络服务的框架程序了。

 

 

这里有一个UserStorage_server.skeleton.cpp的源文件,显然是服务端的框架,那么就从这里开始实现我们自己的简单需求吧,其他源文件暂时不管了。我将修改skeleton程序,保存client发送过来的user。

 

整个服务端的实现,很简单,就是编写了store和retrieve两个方法而已,很奇怪的是thrift生成的retrieve方法,返回值被移到了参数中去了,不知为何会这样,抽空研究下thrift源码再说吧。至此,server端的应用编写完了,编译下看看。

 

 

编译完后,目录中就产生了user_server这个可执行的服务器程序了哦,感觉很简单吧,完全没有网络编程的感觉吧,当把client实现完后,才真正的感觉网络服务的编写和本地程序没有什么区别。

 

 

我们将目录的UserStorage_server.skeleton.cpp文件删了,加入我们自己编写的客户端程序UserStorage_client.cpp,代码如下:

 

client程序比server就更简单,就是构造了3个user对象,然后依次保存到server中,最后又其他顺序获取出来。client在存储和获取数据的时候,就和本地方法调用一样,你自己就很难察觉你是把数据保存到网络中的另外一个服务器上去了,呵呵。最后我们运行服务器,然后执行以下客户端程序看看结果如何。

 

 

 

client的结果符合我们预期的想象。

 

对thrift的小试牛刀就到此结束了,后面的路还很长,继续深入研究thrift的实现。

 

备注:thrift跨语言的强大特性,真的不错,这里我就不废话我的python客户端了,python is always simple and graceful. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Thrift 小试牛刀

thrift java 入门实践
  • sunning9001
  • sunning9001
  • 2016-06-05 19:01:47
  • 394

thrift 小试牛刀

  • 2012年08月10日 09:50
  • 33KB
  • 下载

Docker小试牛刀

  • 2018年01月05日 14:41
  • 1.39MB
  • 下载

第五篇:Struts小试牛刀篇

严重警告:如果你跳过了上篇,在本篇遇到了的任何难题,本人概不负责 开场白: 首先我希望你明白Struts是怎么工作的。在jsp页面上,当我们发生了提交动作(你就理解为当按钮按下的时候),页面上是数据(...
  • arielxp
  • arielxp
  • 2004-06-24 07:03:00
  • 2268

ios hook 小试牛刀(一)

  • 2017年09月13日 16:04
  • 40KB
  • 下载

thrift源码

  • 2017年11月16日 15:02
  • 165KB
  • 下载

linux小试牛刀-项目开发

  • 2015年07月09日 22:38
  • 1.01MB
  • 下载

Linux Shell脚本攻略1:小试牛刀(3)

1. 函数和参数 2. 将命令序列的输出读入变量 3. 不使用回车键来读取n个字符 4. 运行命令直至成功 5. 字段分隔符 6. 迭代器 7. 比较与测试...
  • qixizhuang
  • qixizhuang
  • 2017-09-09 22:55:03
  • 157

MySQL小试牛刀

1.进入黑窗口连接Mysql服务器    mysql - u root[用户名] -p(小写)[密码] -P(大写)3306[端口号]  -hocalhost[主机] 2.断开本次连接   ...
  • LNK937470228
  • LNK937470228
  • 2017-12-03 00:42:13
  • 138

android应用 小试牛刀 开发自己的应用程序就是这么简单

一.搭建eclipse+android插件+android的sdk开发环境。 1、安装java JDK,android是基于java的应用,注意是JDK,非JRE 下载地址:http://ww...
  • shenzhenhair
  • shenzhenhair
  • 2013-02-25 20:21:28
  • 206
收藏助手
不良信息举报
您举报文章:thrift小试牛刀
举报原因:
原因补充:

(最多只允许输入30个字)