关闭

thrift小试牛刀

标签: userapacheserverpythonsmalltalkinitialization
3264人阅读 评论(0) 收藏 举报
分类:

在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. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:209044次
    • 积分:2556
    • 等级:
    • 排名:第14420名
    • 原创:37篇
    • 转载:2篇
    • 译文:0篇
    • 评论:75条
    最新评论