Thrift五種工作模式
每種模式都是在前輩的基礎(chǔ)上的升級(jí)版本:
1.TSimpleServer:?jiǎn)尉€程瓤鼻,阻塞式IO拙已,一般只能用于demo
2.TNonblockingServer:在1的基礎(chǔ)上悬垃,基于NIO的方式访忿。優(yōu)點(diǎn):非阻塞? 缺點(diǎn): 如果有IO或者其它耗時(shí)連接是牢,其它的請(qǐng)求會(huì)受影響
3.THsHaServer:在2的基礎(chǔ)上,主線程用于獲取socket連接礁击,NIO模式盐杂,并負(fù)責(zé)IO讀取漏麦。之后交給線程池進(jìn)行處理。主線程還是會(huì)成為性能瓶頸况褪。
4.TThreadPoolServer:在3的基礎(chǔ)上,主線程通過(guò)阻塞的方式獲取socket連接更耻,然后將socket連接請(qǐng)求封裝成任務(wù)提交到連接池
5.TThreadedSelectorServer:在4的基礎(chǔ)上测垛,將業(yè)務(wù)線程和IO線程分開(kāi),有獨(dú)立的線程池秧均。最高級(jí)和有效的模式食侮,可以作為默認(rèn)模式。
協(xié)議
Thrift可以讓你選擇客戶端與服務(wù)端之間傳輸通信協(xié)議的類別目胡,在傳輸協(xié)議上總體上劃分為文本(text)和二進(jìn)制(binary)傳輸協(xié)議, 為節(jié)約帶寬锯七,提供傳輸效率,一般情況下使用二進(jìn)制類型的傳輸協(xié)議為多數(shù)誉己,但有時(shí)會(huì)還是會(huì)使用基于文本類型的協(xié)議眉尸,這需要根據(jù)項(xiàng)目/產(chǎn)品中的實(shí)際需求:
1、TBinaryProtocol – 二進(jìn)制編碼格式進(jìn)行數(shù)據(jù)傳輸巨双。
2噪猾、TCompactProtocol – 這種協(xié)議非常有效的,使用Variable-Length Quantity (VLQ) 編碼對(duì)數(shù)據(jù)進(jìn)行壓縮筑累。
3袱蜡、TJSONProtocol – 使用JSON的數(shù)據(jù)編碼協(xié)議進(jìn)行數(shù)據(jù)傳輸。
4慢宗、TSimpleJSONProtocol – 這種節(jié)約只提供JSON只寫的協(xié)議坪蚁,適用于通過(guò)腳本語(yǔ)言解析
5、TDebugProtocol – 在開(kāi)發(fā)的過(guò)程中幫助開(kāi)發(fā)人員調(diào)試用的镜沽,以文本的形式展現(xiàn)方便閱讀敏晤。
傳輸層
1、TSocket- 使用堵塞式I/O進(jìn)行傳輸缅茉,也是最常見(jiàn)的模式茵典。
2、TFramedTransport- 使用非阻塞方式宾舅,按塊的大小统阿,進(jìn)行傳輸,類似于Java中的NIO筹我。
3扶平、TFileTransport- 顧名思義按照文件的方式進(jìn)程傳輸,雖然這種方式不提供Java的實(shí)現(xiàn)蔬蕊,但是實(shí)現(xiàn)起來(lái)非常簡(jiǎn)單结澄。
4、TMemoryTransport- 使用內(nèi)存I/O,就好比Java中的ByteArrayOutputStream實(shí)現(xiàn)麻献。
5们妥、TZlibTransport- 使用執(zhí)行zlib壓縮,不提供Java的實(shí)現(xiàn)勉吻。
參考鏈接:
https://blog.csdn.net/houjixin/article/details/42779915
https://www.cnblogs.com/exceptioneye/p/4945073.html