thrift框架简介(三)

1、thrift由两部分组成:

            编译器(在comliler目录下,采用C++编写)和服务器(在lib目录下),其中编译器的作用是将用户定义的thrift文件编译成对应的语言代码,而服务器是事先已经实现好的、可供用户直接使用的RPC Server(当然,用户也很容易编写自己的Server)。同大部分编译器一样,thrift编译器(采用C++编写)也分为词法分析、语法分析等步骤,thrift采用了开源的flex和Bison进行词法语法分析(具体见thrift.ll和thrift.yy),经过语法分析后,thrift根据对应语言的模板(在compiler\cpp\src\generate目录下)生成相应的代码。对于服务器而言,thrift包含比较经典的服务器模型,比如单线模型(TSimpleServer),线程池模型(TThreadPoolServer)、一个请求一个线程(TThreadedServer)和非阻塞模型(TNonblockingServer)等。点击打开链接http://dongxicheng.org/search-engine/thrift-internals/

2、利用thrift部署服务

            主要流程:编写服务说明,保存到.thrift文件;

                            根据需要,编译.thrift文件,生成相应的语言源代码;

                            根据实际需要,编写client端和service端代码。

        (1).thrift文件编写:

                            一般将服务放到一个.thrift文件中,服务的编写语法于C语言基本一致,在.thrift文件中主要有一下几个内容:变量声明、数据声明(struct)和服务街廓生命(service,可以继承其他接口)。

下面分析thrift的tutorial中带的例子tutorialthrift:

包含头文件:

59行:include “shared.thrift”

指定目标语言:

67行:namespace cpp tutorial

定义变量:

86行:const i32 INT32CONSTANT=9853

定义结构体:

109行:struct Work{

1:i32 num1=0,

2:i32 num2,

3:Operation op,

4:optional string comment,

}

定义服务:

service Calculator extends shared SharedService{

void ping(),

i32 add(1:i32 num1,2:i32 num2),

i32 calculate(1:i32 logid,2:Work w) throw (1:InvalidOperation ouch),

oneway void zip()

}

要生成C++代码:./thrift --gen cpp tutorial.thrift,结果代码存放在gen-cpp目录下
     要生成java代码:./thrift --gen java tutorial.thrift,结果代码存放在gen-java目录下

            (2)client端和server端代码编写

client端和server端代码要调用编译.thrift生成的中间文件,下面分析cpp文件线面的CppClient.cpp和CppServer.cpp


在client端,用户自定义CalculatorClient类型的对象(用户在.thrift文件中声明的服务名称是Calculaor,则生成的中间代码中的主类为ClalculatorClient),该对象中封装了各种服务,可以直接嗯调用(如client.ping()),然后thrift会通过封装的rcp调用server端同名函数。在server端需要事先在.thrift文件中声明的服务中的所有功能,以便粗合理client发过来的请求。

在client端,用户自定义CalculatorClient类型的对象(用户在.thrift文件中声明的服务名称是Calculator, 则生成的中间代码中的主类为CalculatorClient), 该对象中封装了各种服务,可以直接调用(如client.ping()), 然后thrift会通过封装的rpc调用server端同名的函数。

在server端,需要实现在.thrift文件中声明的服务中的所有功能,以便处理client发过来的请求。

转载网址:http://dongxicheng.org/search-engine/thrift-framework-intro/点击打开链接


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值