(一)簡介服務器
processor層主要負責經過客戶端請求的接口名,選擇特定的方法對客戶端請求進行處理。框架
是協議層和用戶提供的服務實現之間的紐帶定義了調用服務實現的接口框架。函數
(二)結構spa
TProcessor、TDispatchProcessor爲thrift類,爲服務分配提供基類;在TDispatchProcessor類中實現process方法,先獲取請求信息,在經過dispatchCall調用特定的服務方法。指針
XXXProcessor是由thrift自動生成的類,繼承於TDispatchProcessor類,並實現了dispatchCall方法;經過map結構調用特定的process_XXX方法;而在process_XXX方法中讀取請求參數,並經過調用XXXIf的特定方法完成實際服務端邏輯。xml
XXXHandler是用戶實現的服務邏輯處理;繼承於服務接口類XXXIf,實現具體的接口邏輯處理。對象
(三)實現blog
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