thrift介绍及应用(二)—简单应用

转载 2016年08月28日 16:59:50

原文:http://blog.csdn.net/guxch/article/details/12162131

-----------------------------------------------------------------------------------

【接上文“thrift介绍及应用(一)—介绍”】


六、一个最简单的实例

Thrift文件(demo.thirft,来自官网)如下:

[plain] view plain copy
  1. struct UserProfile   
  2. {  
  3.   1:i32 uid,  
  4.   2:string name,  
  5.   3:string blurb  
  6. }  
  7.   
  8. service UserStorage   
  9. {  
  10.  void store(1: UserProfile user),  
  11.  UserProfile retrieve(1: i32 uid)  
  12. }  
运行

[plain] view plain copy
  1. thrift –gen cpp demo.thrift  
则生成的文件如下:


  • demo_constants:这个文件似乎没有用,可以在其中定义全局变量之类的东西。
  • demo_types:类型定义(例子中的structUserProfile)都在这个文件中。
  • UserStorage:这个文件比较重要,内容比较多,其中的内如下图。图左边是两个service方法的传入传出参数,注意其中每个的实现都有两个,一个是带p的,被用在客户端代码中,另一个是不带p的,被用在服务器端代码中,其实它们的代码相当一致(相同的函数部分),不知道thrift这样做的用意在哪。图右边UserStorageIf是消息接口定义,UserStorageIfFactory等是接口的“工厂”。UserStorageNull挺有意思,大概是什么都不做(既然什么都不做,要它做什么呢?)。UserStorageMultiface是将多个UserStorageIf集合起来(vector)处理。对用户来讲,客户端真正有意义的代码在UserStorageClient中,写客户端时,需要认真查看其接口,在其上编写自己的业务逻辑。服务器的处理过程在UserStorageProcess类中(但我们自己逻辑在另外的地方)。
  • UserStorage_server.skeleton:这个是服务器端的框架(其实它可以运行),我们自己的逻辑(例子中store到数据库中或从数据库中retrieve)在UserStorageHandler类中实现,这个类从UserStorageIf继承而来。文件中还有一个main函数,其中给出了以TSimpleServer形式(单线程)实现的服务器。实际的应用中,UserStorage_server.skeleton这个文件将被拆分,业务逻辑可能有若干文件,服务器端的实现也许要复杂一些,与其他业务构成一个main函数,这里的main可能叫做thriftserver_main更合适一些。

需要强调的是,thrift有自己的网络传输格式,因此thrift应用适合于我们不关心传输过程,只关心我们自己的应用层的消息的传递(也就是RPC的概念)的场合,如果规定了网络传输协议,thrift并不适合。

其他实际的应用见hadoop和Hbase的Thrift接口说明。

 

【注:本文参考了Mark Slee, Aditya Agarwal and Marc Kwiatkowski写的“Thrift:Scalable Cross-Language Services Implementation”一文,该文是Thrift的White Paper。】



相关文章推荐

thrift介绍及应用(二)—简单应用

原文:http://blog.csdn.net/guxch/article/details/12162131 六、一个最简单的实例 Thrift文件(demo.thirft,来自官网)如下...

thrift介绍及应用(一)—介绍

原文:http://blog.csdn.net/guxch/article/details/12157151 一、概述         Thrift是Apache下的一个子项目,最早是Facebo...

Thrift应用实践—基本篇

Thrift作为一个RPC框架,很好的解决了跨语言调用问题,并提供灵活高效的传输方式和Server模式。在实际应用中,个人认为Thrift更多的是用于系统的解耦,负责模块间的通信,使各模块可以独立开发...

RPC-Thrift简单应用

Thrift是Facebook开源的一款RPC框架,使用起来非常方便。下面举一个简单的小例子。安装包下载wget http://www.apache.org/dist//thrift/0.9.3/th...

微服务框架Finagle介绍 Part3: 在Finagle中开发基于Thrift协议的应用

原文地址:http://skaka.me/blog/2016/05/02/finagle3/ 在上篇文章中我们开发了一个基于Http协议的echo服务端和客户端. 这篇文章我们将开发一个基于Thr...

简单控件的应用(二)—学生管理系统

源程序下载地址:http://down.qiannao.com/space/file/luowei505050/-6211-7684-7a0b-5e8f/-5b66-751f-7ba1-7406-7c...

Hadoop-thrift介绍及应用

一、概述 hadoop是目前使用比较多的分布式文件系统,由于hadoop是用Java写的,对非Java程序人员,不好直接使用它的接口,不过它提供了thrift接口服务器,因此也可以采用其他语言来编写...

shader的简单应用—1

shader编程其实是对GPU编程,我们的shader编程不像untiy脚本对CPU编程那样,它需要简介,简单。接下来做几个很有意思的shader    Shader "Custom/CartoonS...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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