Thrift for Java 源码解析

本文解析了ThriftforJava自动生成的代码结构,包括服务接口、客户端类、参数类及Processor类的功能,并介绍了Thrift客户端和服务端的具体实现细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Thrift for Java 源码解析

一、            Thrift自动生成的代码解析

以thrift自带的tutorial为例,tutorial.thrift生成的java文件有:

 

InvalidOperation.java是对应的异常类文件;Operation.java是枚举类文件;tutorialConstants.java是所有常量类;Work.java是struct结构体类文件;由此可以看出thrift扫描IDL文件里的struct、enum、exception、service,并分别生成对应的文件,下面,下面详细介绍下service自动生成的文件结构:


1、  服务接口 Iface、AsyncIface


Thrift服务端需要实现Iface接口,这个接口就是服务需要提供的外部API、如果服务端支持异步调用,还需要实现AsynceIface接口;接口含有的所有方法对应IDL文件里的清单

 

2、  客户端类Client、AsyncClient


客户端类不需要业务进行修改,业务直接使用客户端类与服务器通信,进行远程调用。客户端类帮助业务进行了调用、消息的序列化和网络发送,并接受服务器返回的数据和反序列化,将调用结果返回给业务

 

3、  调用参数和调用结果类


methodname_args\methodname_result这对类对应一个外部接口方法的输入参数和返回值,xxx_args含有write和read方法,与Transport层进行数据的读写交换

4、  Processor类

Processor类是服务端执行客户端请求的回调框架,也就是说,服务端的Transport层接受到客户端的请求,Transport会委托Processor类处理。所以,一般情况下,服务器端创建Iface接口的实例A,并注入到Processor,Processor在处理具体业务接口的时候调用实例A。

 

二、            Thrift客户端代码实现

1、  客户带代码模式


客户端代码一般为:

1)        创建一个Transport对象,连接到服务器对应端口,定义数据传输方式,一般为TCP/IP

2)        创建一个Protocol对象来包裹Transport,定义数据传输格式,常用有二进制

3)        创建一个Client实例,通过client对象直接调用,服务端位置对客户端透明

4)         

注意点:Protocol属于数据协议层,并持有两个transport,一个负责发送数据,一个负责接收数据,默认为同一个transport,所以同一个client实例是线程不安全的,如果客户端需要提高调用并发量,可以考虑实例化多个client实例,或引入client

三、            Thrift服务端代码实现


Thrift库提供了3种模型,分别为:TSimpleServer(单线程服务模型)、TThreadPoolServer(多线程服务模型,阻塞IO)、TNonblockingServer(多线程服务模型,非阻塞IO)

注意:采用第三种服务模型,需要创建一个TNonblockingServerTransport类型的transport,并注入一个Selector对象到transport中,Thrift非阻塞IO依赖Javanio包来处理。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值