欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種基于AIO的socket傳輸系統(tǒng)的制作方法

文檔序號(hào):9436146閱讀:651來源:國(guó)知局
一種基于AIO的socket傳輸系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及Java應(yīng)用遠(yuǎn)程調(diào)用技術(shù)領(lǐng)域,尤其涉及一種基于A1的socket傳輸系統(tǒng)。
【背景技術(shù)】
[0002]Java發(fā)布ΑΙ0(異步輸入/輸出)之后,因?yàn)锳1提供的強(qiáng)大性能,所以成為socket編程(套接字編程)的首選。但由于A1的應(yīng)用程序編程接口 API相對(duì)復(fù)雜,并且在多線程編程情況下,需要考慮的應(yīng)用場(chǎng)景比較復(fù)雜?,F(xiàn)有的RPC(Remote ProcedureCall Protocol一一遠(yuǎn)程過程調(diào)用協(xié)議)調(diào)用基本都是在Tcp協(xié)議上進(jìn)行,需要服務(wù)端提供socket監(jiān)聽。而大多數(shù)RPC框架仍然是基于原始的線程式socket服務(wù)器實(shí)現(xiàn),難以在單機(jī)上提供數(shù)以萬計(jì)的連接能力。所以推出一個(gè)基于A1的socket傳輸系統(tǒng),旨在為用戶提供強(qiáng)大的底層通訊功能,而讓用戶只關(guān)注業(yè)務(wù),無需面對(duì)任何socket編程。并且盡可能的做到輕量化,對(duì)外只暴露一個(gè)業(yè)務(wù)接口和一個(gè)攔截器接口,使用戶不再需要關(guān)心底層數(shù)據(jù)傳輸。只需要專注在業(yè)務(wù)上即可。

【發(fā)明內(nèi)容】

[0003]本發(fā)明要解決的技術(shù)問題,在于提供一種基于A1的socket傳輸系統(tǒng),本發(fā)明充分利用了 A1的系統(tǒng)讀寫能力,可以在單臺(tái)機(jī)器上,通過線程池管理數(shù)以萬計(jì)的連接。實(shí)現(xiàn)了底層TCP協(xié)議和上層的完全解耦,使得API接口更簡(jiǎn)單,客戶端無需提供任何東西進(jìn)行操作。
[0004]本發(fā)明是這樣實(shí)現(xiàn)的:一種基于A1的socket傳輸系統(tǒng),所述系統(tǒng)包括數(shù)據(jù)傳輸模塊、數(shù)據(jù)攔截器模塊以及消息處理模塊,所述數(shù)據(jù)傳輸模塊接收客戶端連接請(qǐng)求,在收到連接請(qǐng)求后,系統(tǒng)新建一個(gè)Server ChannelInfo通道,該通道對(duì)象持有了當(dāng)前連接過來的socket通道,并且會(huì)獲取在服務(wù)器啟動(dòng)的時(shí)候設(shè)置的參數(shù),將參數(shù)設(shè)置到ServerChannelInfo通道之中,將通道Server ChannelInfo中消息數(shù)據(jù)發(fā)送給數(shù)據(jù)攔截器模塊;所述數(shù)據(jù)攔截器模塊在消息數(shù)據(jù)到達(dá)消息處理模塊中的消息處理器和離開消息處理器時(shí)進(jìn)行消息的攔截和過濾;所述消息處理模塊通過消息處理器處理消息,負(fù)責(zé)消息數(shù)據(jù)的分發(fā),系統(tǒng)中線程池資源的準(zhǔn)備。
[0005]進(jìn)一步地,所述數(shù)據(jù)傳輸模塊包括socket連接響應(yīng)器、通道讀取響應(yīng)器以及消息寫出響應(yīng)器;所述socket連接響應(yīng)器負(fù)責(zé)接收客戶端的socket連接請(qǐng)求,所述通道讀取響應(yīng)器負(fù)責(zé)從Server ChannelInfo通道中讀取消息數(shù)據(jù),所述消息寫出響應(yīng)器,負(fù)責(zé)將消息數(shù)據(jù)從通道發(fā)送。
[0006]進(jìn)一步地,所述消息處理模塊包括消息動(dòng)作類單元、消息請(qǐng)求處理接口單元以及消息處理器;所述消息動(dòng)作類單元用于給線程池提供消息動(dòng)作類,并提供調(diào)用,負(fù)責(zé)消息的入口攔截、請(qǐng)求處理、出口攔截以及通道寫出操作;所述消息請(qǐng)求處理接口單元,為用戶提供消息請(qǐng)求處理接口,使得用戶能完成感興趣的消息的處理,所述消息處理器,負(fù)責(zé)消息的分發(fā),線程池資源的準(zhǔn)備以及消息的處理。
[0007]進(jìn)一步地,所述Server ChannelInfo通道讀取使用的是A1中的異步讀取方式,由實(shí)現(xiàn)ComplteHandler接口的通道讀取響應(yīng)類ChannelReadHandler來負(fù)責(zé);該接口能對(duì)消息數(shù)據(jù)進(jìn)行分析,以確定是否符合格式的報(bào)文文本;并且確定需要讀取的大小,將需要讀取的數(shù)據(jù)進(jìn)行讀?。辉谧x取的過程中發(fā)生讀取緩存大小不足時(shí),此時(shí)會(huì)自動(dòng)擴(kuò)容;以及發(fā)生粘包,此時(shí)類會(huì)將粘包中的數(shù)據(jù),讀取完整的業(yè)務(wù)數(shù)據(jù)的部分,并且將這部分?jǐn)?shù)據(jù)組裝成抽象消息Message投遞到消息處理器,剩余的數(shù)據(jù)則繼續(xù)讀取直到完整后重復(fù)讀取流程;在數(shù)據(jù)讀取完畢并且也投遞完畢后,通道讀取響應(yīng)器會(huì)繼續(xù)在Server Channel Info通道上監(jiān)聽直到通道關(guān)閉或者發(fā)生異常為止。
[0008]進(jìn)一步地,消息寫出采用的是A1中的異步寫出,由實(shí)現(xiàn)了 Complet1nHandler接口的消息寫出響應(yīng)類MessageWriteHandler來負(fù)責(zé);通過將抽象消息Message中組裝好的WriteBuffer寫出到通道中;一旦所有的數(shù)據(jù)都寫出完成,貝Ij會(huì)將當(dāng)前的抽象消息Message內(nèi)的資源進(jìn)行釋放,并且嘗試獲取下一個(gè)代寫的消息,繼續(xù)進(jìn)行寫出。
[0009]進(jìn)一步地,所述數(shù)據(jù)攔截器模塊的信息注冊(cè)是在服務(wù)器一開始啟動(dòng)的時(shí)候,通過掃描,發(fā)現(xiàn)實(shí)現(xiàn)了數(shù)據(jù)攔截器模塊接口的類,將所有這樣的類集合在一起,并且進(jìn)行排序;收到消息時(shí)進(jìn)行入口攔截,而消息發(fā)出時(shí)在對(duì)應(yīng)的位置進(jìn)行出口攔截;當(dāng)消息從通道讀取監(jiān)聽器獲取并組裝完畢后就進(jìn)入消息處理器中等待分配線程資源進(jìn)行處理,一旦獲取到資源就開始執(zhí)行。
[0010]進(jìn)一步地,數(shù)據(jù)攔截器模塊處理的規(guī)則是一層處理完了交給下一層,入口和出口的位置是相反的;即如果入口的時(shí)候是第一個(gè)處理,則出口的時(shí)候是最后一個(gè)處理;數(shù)據(jù)攔截器模塊能返回信息停止后續(xù)的攔截處理,直接進(jìn)入消息處理器,或者能直接中斷整個(gè)流程,將消息放棄并且關(guān)閉通道。
[0011]進(jìn)一步地,消息處理模塊主要由用戶實(shí)現(xiàn)接口 MessageHandler來注冊(cè)對(duì)某一類型感興趣的消息;其中消息動(dòng)作類單元作為線程資源執(zhí)行的載體,執(zhí)行消息上的入口攔截,消息處理,出口攔截,以及消息的嘗試寫出;
[0012]而抽象消息Message作為消息的載體,承載了消息當(dāng)前所在的通道,消息中的業(yè)務(wù)數(shù)據(jù),以及寫出所需的緩存buffer。
[0013]本發(fā)明具有如下優(yōu)點(diǎn):本發(fā)明系統(tǒng)包括數(shù)據(jù)傳輸模塊、數(shù)據(jù)攔截器模塊以及消息處理模塊,所述數(shù)據(jù)傳輸模塊接收客戶端連接請(qǐng)求,在收到連接請(qǐng)求后,系統(tǒng)會(huì)新建一個(gè)Server ChannelInfo通道,將通道Server ChannelInfo中消息數(shù)據(jù)發(fā)送給數(shù)據(jù)攔截器模塊;數(shù)據(jù)攔截器模塊在消息數(shù)據(jù)到達(dá)消息處理模塊中的消息處理器和離開消息處理器時(shí)進(jìn)行消息的攔截和過濾;所述消息處理模塊通過消息處理器處理消息,負(fù)責(zé)消息數(shù)據(jù)的分發(fā),系統(tǒng)中線程池資源的準(zhǔn)備。本發(fā)明充分利用了 A1的系統(tǒng)讀寫能力,可以在單臺(tái)機(jī)器上,通過線程池管理數(shù)以萬計(jì)的連接。實(shí)現(xiàn)了底層TCP協(xié)議和上層的完全解耦,使得API接口更簡(jiǎn)單,客戶端無需提供任何東西進(jìn)行操作。
【附圖說明】
[0014]圖1為本發(fā)明系統(tǒng)的框架原理圖。
[0015]圖2為本發(fā)明數(shù)據(jù)攔截器模塊對(duì)消息進(jìn)入和寫出的處理流程圖。
[0016]圖3為本發(fā)明系統(tǒng)處理消息的一實(shí)施例的原理框圖。
[0017]圖4為本發(fā)明系統(tǒng)處理消息的流程示意圖。
【具體實(shí)施方式】
[0018]請(qǐng)參閱圖1至圖4所示,本發(fā)明的一種基于A1的socket傳輸系統(tǒng),所述系統(tǒng)包括數(shù)據(jù)傳輸模塊、數(shù)據(jù)攔截器模塊以及消息處理模塊,所述數(shù)據(jù)傳輸模塊接收客戶端連接請(qǐng)求,在收到連接請(qǐng)求后,系統(tǒng)新建一個(gè)Server ChannelInfo通道,該通道對(duì)象持有了當(dāng)前連接過來的socket通道,并且會(huì)獲取在服務(wù)器啟動(dòng)的時(shí)候設(shè)置的參數(shù),將參數(shù)設(shè)置到ServerChannelInfo通道之中,將通道Server ChannelInfo中消息數(shù)據(jù)發(fā)送給數(shù)據(jù)攔截器模塊;所述數(shù)據(jù)攔截器模塊在消息數(shù)據(jù)到達(dá)消息處理模塊中的消息處理器和離開消息處理器時(shí)進(jìn)行消息的攔截和過濾;所述消息處理模塊通過消息處理器處理消息,負(fù)責(zé)消息數(shù)據(jù)的分發(fā),系統(tǒng)中線程池資源的準(zhǔn)備。其中,傳輸系統(tǒng)的底層(即數(shù)據(jù)傳輸模塊)是為A1的讀寫接口,采用響應(yīng)器的模式,即為異步操作模式,通過多線程的方式,最大程度釋放系統(tǒng)性能。其中數(shù)據(jù)傳輸模塊、數(shù)據(jù)攔截器模塊以及消息處理模塊中與使用者相關(guān)的只有數(shù)據(jù)攔截器模塊和消息處理模塊。用戶通過實(shí)現(xiàn)一個(gè)消息處理的接口,來處理用戶感興趣的信息;通過實(shí)現(xiàn)攔截接口,實(shí)現(xiàn)對(duì)消息的攔截,從而方便進(jìn)行橫向編程。而系統(tǒng)中的類以及用戶繼承接口的類,都通過注解,被1C(控制反轉(zhuǎn)Invers1n of Control,英文縮寫為1C是一個(gè)重要的面向?qū)ο缶幊痰姆▌t來削減計(jì)算機(jī)程序的耦合問題,也是輕量級(jí)的Spring框架的核心。)容器識(shí)別以及管理。
[0019]在數(shù)據(jù)傳輸模塊、數(shù)據(jù)攔截器模塊以及消息處理模塊中,貫穿始終的是ServerChannelInfo通道和抽象消息Message。前者代表著通道對(duì)象,只要socket通道不關(guān)閉,就會(huì)持續(xù)存在。后者表示單次業(yè)務(wù)數(shù)據(jù)的消息對(duì)象,會(huì)經(jīng)歷從數(shù)據(jù)傳輸模塊傳遞到消息處理模塊再到數(shù)據(jù)傳輸模塊寫出,然后被銷毀。
[0020]其中,所述數(shù)據(jù)傳輸模塊包括socket連接響應(yīng)器、通道讀取響應(yīng)器以及消息寫出響應(yīng)器;所述socket連接響應(yīng)器負(fù)責(zé)接收客戶端的socket連接請(qǐng)求,所述通道讀取響應(yīng)器負(fù)責(zé)從Server ChannelInfo通道中讀取消息數(shù)據(jù),所述消息寫出響應(yīng)器,負(fù)責(zé)將消息數(shù)據(jù)從通道發(fā)送。
[0021]所述消息處理模塊包括消息動(dòng)作類單元、消息請(qǐng)求處理接口單元以及消息處理器;所述消息動(dòng)作類單元用于給線程池提供消息動(dòng)作類,并提供調(diào)用,負(fù)責(zé)消息的入口攔截、請(qǐng)求處理、出口攔截以及通道寫出操作;所述消息請(qǐng)求處理接口單元,為用戶提供消息請(qǐng)求處理接口,使得用戶能完成感興趣的消息的處理,所述消息處理器,負(fù)責(zé)消息的分發(fā),線程池資源的準(zhǔn)備以及消息的處理。
[0022]另外,所述Server ChannelInfo通道讀取使用的是A1中的異步讀取方式,由實(shí)現(xiàn)ComplteHandler接口的通道讀取響應(yīng)類ChannelReadHandler來負(fù)責(zé);該接口能對(duì)消息數(shù)據(jù)進(jìn)行分析,以確定是否符合格式的報(bào)文文本;并且確定需要讀取的大小,將需要讀取的數(shù)據(jù)進(jìn)行讀??;在讀取的過程中發(fā)生讀取緩存大小不足時(shí),此時(shí)會(huì)自動(dòng)擴(kuò)容;以及發(fā)生粘包,此時(shí)類會(huì)將粘包中的數(shù)據(jù),讀取完整的業(yè)務(wù)數(shù)據(jù)的部分,并且將這部分?jǐn)?shù)據(jù)組裝成抽象消息Message投遞到消息處理器,剩余的數(shù)據(jù)則繼續(xù)讀取直到完整后重復(fù)讀取流程;在數(shù)據(jù)讀取完畢并且也投遞完畢后,通道讀取響應(yīng)器會(huì)繼續(xù)在Server Channel Info通道上監(jiān)聽直到通道關(guān)閉或者發(fā)生異常為止。
[002
當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
宣威市| 奉化市| 唐河县| 临清市| 吉木乃县| 龙川县| 庐江县| 阿荣旗| 铜山县| 沙坪坝区| 抚顺市| 神农架林区| 修水县| 宁津县| 门源| 修武县| 手游| 高淳县| 都匀市| 娱乐| 钦州市| 塔城市| 黎城县| 界首市| 常熟市| 皋兰县| 县级市| 苍梧县| 肥东县| 泰来县| 界首市| 萨迦县| 竹山县| 织金县| 尼玛县| 周口市| 临漳县| 大竹县| 新泰市| 娱乐| 犍为县|