zoukankan      html  css  js  c++  java
  • thrift(二) processor服务分配层

    (一)简介

        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

  • 相关阅读:
    绿色版QQ2010SP3手记
    使用DQL语句查询数据
    Oracle 数据库密码过期问题
    redis语法与命令
    Redis安装与启动
    centos 7下搭建Redis5.x版集群
    MySQL 命令行操作教程
    Redis集群分片原理及选举流程
    截取文件名与后缀名
    Java POI读取excel 支持xls、xlsx
  • 原文地址:https://www.cnblogs.com/taoxinrui/p/5891011.html
Copyright © 2011-2022 走看看