(一)简介
processor层主要负责通过客户端请求的接口名,选择特定的方法对客户端请求进行处理。
是协议层和用户提供的服务实现之间的纽带定义了调用服务实现的接口框架。
(二)结构
TProcessor、TDispatchProcessor为thrift类,为服务分配提供基类;在TDispatchProcessor类中实现process方法,先获取请求信息,在通过dispatchCall调用特定的服务方法。
XXXProcessor是由thrift自动生成的类,继承于TDispatchProcessor类,并实现了dispatchCall方法;通过map结构调用特定的process_XXX方法;而在process_XXX方法中读取请求参数,并通过调用XXXIf的特定方法完成实际服务端逻辑。
XXXHandler是用户实现的服务逻辑处理;继承于服务接口类XXXIf,实现具体的接口逻辑处理。
(三)实现
TProcessorEventHandler类
处理porcessor产生的事件的虚拟接口类,定义了一些事件发生时候的处理函数。
TProcessor类
输入流、输出流之间的服务器,负责调用用户定义的服务接口。
eventHandler_ | TProcessorEventHandler | 处理事件类 |
process(in, out, connectionContext) 纯虚函数
process(io, connectionContext)
TDispatchProcessor类
解析消息头,基于函数名调用函数。
process(io, connectionContext)process(in, out, connectionContext) 虚函数,实际处理请求
读取请求函数信息,并通过调用dispatchCall函数处理
dispatchCall(in, out, fname, seqid, callContext) 纯虚函数
XXXProcessor类
特定服务对应处理类
iface_ | XXXIf | 服务接口对象 |
processMap_ | map<string, ProcessFunction> | 函数名-函数指针 对应map |
构造函数XXXProcessor(XXXIf)
对iface_进行赋值,并将对应的函数名、函数指针加入processMap_
dispatchCall(in, out, fname, seqid, callContext)
在processMap_通过函数名,找到则调用对应函数process_XXX(seqid, in, out, callContext)
process_XXX(seqid, in, out, callContext)
获取上下文、获得请求信息、调用对应服务处理函数、返回处理结果
TProcessorContextFreer类
帮助类,帮助生成的代码释放上下文资源
(四)总结
在TDispatchProcessor类中指定请求调度方式,先获取请求信息,再调用特定服务的dispatchCall
在XXXProcessor类中实现dispatchCall,通过map方式调用特定处理方法process_XXX