跟我學(xué)Thrift 5:深入理解Thrift生產(chǎn)的代碼

如何才能深入理解Thrift原理岩灭,Everything is in code.

繼續(xù)以上一篇文章中的購買汽車的service為例子偎行,我們在看編譯生產(chǎn)的代碼之前,想一下如果我們是Thrift的設(shè)計者熄云,會生產(chǎn)哪些代碼:

1.首先是如何正確的read妙真,write。即序列化和反序列化對象:細節(jié)包括read珍德,write fieldId,fieldValue

2.處理好IsSet接口

其中Car和Consumer都是簡單struct(沒有包含子struct)薄料,我們來看一下自動生成的代碼

Struct/POJO對象

比如Car泵琳,編譯后的Car.java它包含如下幾個內(nèi)部類:

1.CarStandard(Tuple)Scheme(Factory): scheme用于read, write即序列化反序列化car對象获列,本質(zhì)它還是調(diào)用對應(yīng)Protocol里面的read,write方法.?

目前觀察發(fā)現(xiàn)Tuple就是將Optional屬性通過BitSet的方式來存儲击孩。即將required和optional

2.Scheme中的read,write會被Car對象的read创泄,write方法調(diào)用

其它就是一些get/set(包含IsSet方法)等方法

復(fù)合Struct對象

比如Order對象括蝠,它包含car和consumer。編譯后的代碼包括:

1.和簡單對象類似碍拆,包含Scheme對象,它內(nèi)部處理car對象時端幼,會調(diào)用car對象的read弧满,write方法

2.Oder對象的read,write會調(diào)用schema的read滑进,write

Service對象

CarService編譯后募谎,會產(chǎn)生

1.Iface:service的接口

2.createBuyCarOrder_args:內(nèi)部同樣有scheme子類,負責read节槐,write拐纱,它會調(diào)用car,order等對象的read揍庄,write

3.Client:封裝了客戶端的調(diào)用东抹,構(gòu)造時傳入TProtocol。它通過createBuyCarOrder_args來完成序列化和反序列化,它最終會調(diào)用對象的read试浙,write方法。

4.AsyncClient:Client的異步實現(xiàn)

5.Processor: 服務(wù)端的調(diào)用封裝田巴,構(gòu)造時需要傳入真正的服務(wù)實現(xiàn)類壹哺。在調(diào)用方法的時候艘刚,processor會調(diào)用真正的實現(xiàn)實現(xiàn)類,然后

6.createBuyCarOder_result:調(diào)用服務(wù)類后產(chǎn)生的結(jié)果的類的封裝,里面包含scheme(它可以負責對結(jié)果進行read岗喉,write)

整個流程就是:

Client類發(fā)起請求钱床,通過調(diào)用對象的read埠居,write進行序列化,對象的read纸颜,write會調(diào)用schema的read捏浊,write

Server端收到請求后,會轉(zhuǎn)到Processor中浊洞,會調(diào)用服務(wù)實現(xiàn)類胡岔,然后將結(jié)果封裝到createBuyCarOder_result中,里面會調(diào)用對象的read苫亦,write方法進行序列話怨咪,將結(jié)果返回給Client

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末诗眨,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子匠楚,更是在濱河造成了極大的恐慌,老刑警劉巖峡懈,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肪康,死亡現(xiàn)場離奇詭異,居然都是意外死亡梅鹦,警方通過查閱死者的電腦和手機齐唆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來茉帅,“玉大人堪澎,你說我怎么就攤上這事味滞。” “怎么了剑鞍?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵便脊,是天一觀的道長光戈。 經(jīng)常有香客問我,道長晌杰,這世上最難降的妖魔是什么筷弦? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮哼鬓,結(jié)果婚禮上异希,老公的妹妹穿的比我還像新娘绒瘦。我一直安慰自己扣癣,他們只是感情好,可當我...
    茶點故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布该酗。 她就那樣靜靜地躺著呜魄,像睡著了一般莱衩。 火紅的嫁衣襯著肌膚如雪爵嗅。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天笨蚁,我揣著相機與錄音睹晒,去河邊找鬼。 笑死括细,一個胖子當著我的面吹牛伪很,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播勒极,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼是掰,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了辱匿?” 一聲冷哼從身側(cè)響起键痛,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎匾七,沒想到半個月后絮短,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年拢驾,在試婚紗的時候發(fā)現(xiàn)自己被綠了咖为。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,566評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡吞彤,死狀恐怖低飒,靈堂內(nèi)的尸體忽然破棺而出褥赊,到底是詐尸還是另有隱情,我是刑警寧澤俐银,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布吱七,位于F島的核電站踊餐,受9級特大地震影響三痰,放射性物質(zhì)發(fā)生泄漏散劫。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望症概。 院中可真熱鬧,春花似錦募壕、人聲如沸舱馅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至渠鸽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間猎拨,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留痕寓,地道東北人硬毕。 一個月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓元践,卻偏偏與公主長得像沪羔,于是被迫代替她去往敵國和親任内。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,440評論 2 348

推薦閱讀更多精彩內(nèi)容