亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種基于IOCP機(jī)制實(shí)現(xiàn)網(wǎng)絡(luò)服務(wù)代理的方法與流程

文檔序號(hào):11879171閱讀:561來(lái)源:國(guó)知局
一種基于IOCP機(jī)制實(shí)現(xiàn)網(wǎng)絡(luò)服務(wù)代理的方法與流程
本發(fā)明涉及網(wǎng)絡(luò)通信領(lǐng)域,特別涉及一種基于IOCP機(jī)制實(shí)現(xiàn)網(wǎng)絡(luò)服務(wù)代理的方法。
背景技術(shù)
:在信息化時(shí)代,網(wǎng)絡(luò)通信是非常重要的,是把各種設(shè)備連接在一起的重要技術(shù)手段。隨著通信規(guī)模的越來(lái)越龐大,網(wǎng)絡(luò)中心結(jié)點(diǎn)的設(shè)計(jì)變得非常的重要,因?yàn)樗怯绊懲ㄐ判实钠款i點(diǎn)。應(yīng)對(duì)多客戶端的連接,可以使用同步通信+多線程的方式來(lái)應(yīng)對(duì),但這種方式存在的問(wèn)題是,當(dāng)每個(gè)客戶端連入后在中心結(jié)點(diǎn)都要開啟個(gè)線程,由于所有的這些線程都是處于運(yùn)行狀態(tài),系統(tǒng)不得不在所有可運(yùn)行的線程之間進(jìn)行上下文切換,而線程切換是相當(dāng)浪費(fèi)時(shí)間的。IOCP模型又稱為完成端口模型,是Windows平臺(tái)下開發(fā)高性能服務(wù)器應(yīng)用的一種IO模型,它可以解決大量并發(fā)連接請(qǐng)求。在計(jì)算機(jī)領(lǐng)域中,代理是指按照用戶意愿,能夠自主執(zhí)行的軟件模塊。對(duì)應(yīng)TCP/IP分層模型,代理技術(shù)可分為網(wǎng)絡(luò)接口層代理技術(shù),IP層代理技術(shù),傳輸層代理技術(shù)和應(yīng)用層代理技術(shù)。網(wǎng)絡(luò)代理服務(wù)器需要具備提供大量并發(fā)訪問(wèn)服務(wù)的能力。通過(guò)改進(jìn)應(yīng)用程序的性能和提高硬件性能并不能真正解決這個(gè)問(wèn)題,因?yàn)閱闻_(tái)服務(wù)器性能總是有限的,而且網(wǎng)絡(luò)請(qǐng)求具有突發(fā)性,當(dāng)某些重在事件發(fā)生時(shí),網(wǎng)絡(luò)訪問(wèn)就會(huì)急劇上升,從而造成網(wǎng)絡(luò)阻塞,利用集群技術(shù)在應(yīng)用系統(tǒng)中實(shí)現(xiàn)負(fù)載均衡可以較好地解決這一問(wèn)題。就目前而言,大多數(shù)應(yīng)用都是使用IOCP這種機(jī)制將大量并發(fā)請(qǐng)求接入到系統(tǒng)中,但是仍存在一些缺陷,例如專利號(hào)201210575218的基于IOCP的海量終端設(shè)備接入系統(tǒng)提供的方法只是將海量并發(fā)請(qǐng)求接入,對(duì)于如何合理地分發(fā)這些請(qǐng)求卻沒(méi)有涉及。這并不能很好地滿足實(shí)際的需求。技術(shù)實(shí)現(xiàn)要素:本發(fā)明的目的在于克服現(xiàn)有技術(shù)的缺點(diǎn)與不足,提供一種基于IOCP機(jī)制實(shí)現(xiàn)網(wǎng)絡(luò)服務(wù)代理的方法。本發(fā)明的目的通過(guò)以下的技術(shù)方案實(shí)現(xiàn):一種基于IOCP機(jī)制實(shí)現(xiàn)網(wǎng)絡(luò)服務(wù)代理的方法,包括以下步驟:S1.通過(guò)IOCP接入客戶端的請(qǐng)求;S2.代理服務(wù)端對(duì)接入的客戶端請(qǐng)求進(jìn)行過(guò)濾處理;S3.代理服務(wù)端利用負(fù)載均衡算法將過(guò)濾后的客戶端請(qǐng)求分發(fā)到負(fù)載最低的服務(wù)端進(jìn)行處理。步驟S1中,所述客戶端,在發(fā)起請(qǐng)求時(shí),首先要將發(fā)送的數(shù)據(jù)按照協(xié)議規(guī)則封裝成數(shù)據(jù)包,然后使用Socket中的異步發(fā)送方法將數(shù)據(jù)包發(fā)送到網(wǎng)絡(luò)中,如果收到應(yīng)答包且指示發(fā)送數(shù)據(jù)包正確則結(jié)束,否則重發(fā)。步驟S2中,所述過(guò)濾處理是指代理服務(wù)端收到客戶端發(fā)來(lái)的數(shù)據(jù)包后驗(yàn)證數(shù)據(jù)包的完整性,如果無(wú)誤則將該數(shù)據(jù)包放入到等待隊(duì)列,然后選擇一個(gè)負(fù)載最低的服務(wù)端進(jìn)行請(qǐng)求轉(zhuǎn)發(fā);否則丟棄該數(shù)據(jù)包。步驟S3中,所述負(fù)載均衡算法為動(dòng)態(tài)加權(quán)算法,代理服務(wù)端以當(dāng)前的負(fù)載情況為依據(jù),將每次每個(gè)服務(wù)節(jié)點(diǎn)的指標(biāo)信息進(jìn)行轉(zhuǎn)換得到服務(wù)端的負(fù)載量,由此確定負(fù)載最低的服務(wù)端。所述指標(biāo)信息包括CPU占有率L(C1)、磁盤IO占有率L(D1)、內(nèi)存占有率L(M1),則服務(wù)器的負(fù)載量L(S1)計(jì)算公式如下:L(S1)=r1r2r3L(C1)L(D1)L(M1)---(1)]]>其中r1、r2、r3分別為當(dāng)前服務(wù)類型下,CPU占有率L(C1)、磁盤IO占有率L(D1)、內(nèi)存占有率L(M1)的重要系數(shù)。它以系統(tǒng)當(dāng)前的負(fù)載情況為依據(jù),可以充分利用系統(tǒng)的處理能力來(lái)減少服務(wù)的響應(yīng)速度,每次每個(gè)服務(wù)節(jié)點(diǎn)反映的是自己的各項(xiàng)信息,如CPU占有率L(C1)、磁盤IO占有率L(D1)、內(nèi)存占有率L(M1)。這些信息并不能代表某一節(jié)點(diǎn)的負(fù)載情況,所以需要一個(gè)函數(shù)將這些指標(biāo)進(jìn)行一次轉(zhuǎn)換,得到該服務(wù)器的負(fù)載量L(S1):L(S1)=r1r2r3L(C1)L(D1)L(M1)---(1)]]>因?yàn)榉?wù)類型不同,對(duì)節(jié)點(diǎn)的各個(gè)部分的負(fù)載影響有差異。因此,引入?yún)?shù)r,用以強(qiáng)調(diào)該類服務(wù)對(duì)各個(gè)部分的不同程度影響。比如,大文件查找服務(wù)來(lái)說(shuō),磁盤IO、內(nèi)存對(duì)服務(wù)節(jié)點(diǎn)的速率影響較大。所以,我們可以這樣調(diào)整參數(shù)r,r=[0.1,0.2,.0.3],用以表示磁盤與內(nèi)存對(duì)該項(xiàng)服務(wù)的重要性。若當(dāng)前系數(shù)不能不能很好地反映節(jié)點(diǎn)的負(fù)載,可以對(duì)系數(shù)不斷的修正,直到找到合適的一組參數(shù)。將參數(shù)r代入上述公式并展開得:L(S1)=0.1*L(C1)+0.2*L(D1)+0.3*L(M1)(2)。所述代理服務(wù)端會(huì)定時(shí)去與服務(wù)端進(jìn)行數(shù)據(jù)交換。代理服務(wù)端與服務(wù)端定時(shí)進(jìn)行數(shù)據(jù)交換的目的是了解所有服務(wù)當(dāng)前任務(wù)飽和狀態(tài),以便將客戶請(qǐng)求發(fā)送到正確的服務(wù)端。所述服務(wù)端收到代理服務(wù)端發(fā)來(lái)的請(qǐng)求之后進(jìn)行處理,處理完畢后將處理結(jié)果發(fā)回給代理服務(wù)端,同時(shí)上報(bào)服務(wù)端當(dāng)前的狀態(tài)。所述客戶端、代理服務(wù)端、服務(wù)端采用的是C/S架構(gòu)模式,客戶端與代理服務(wù)端之間、代理服務(wù)端與服務(wù)端之間均通過(guò)Socket進(jìn)行網(wǎng)絡(luò)通信。所述客戶端采用微軟的Winform桌面開發(fā)技術(shù),用于實(shí)現(xiàn)客戶端的業(yè)務(wù)邏輯,所述業(yè)務(wù)邏輯包括收發(fā)數(shù)據(jù)、數(shù)據(jù)展示、與用戶進(jìn)行交互;所述代理服務(wù)端采用微軟的C++語(yǔ)言開發(fā)的Windows服務(wù),在客戶端與服務(wù)端之間充當(dāng)代理角色,用于將客戶的請(qǐng)求接入并進(jìn)行相應(yīng)的轉(zhuǎn)發(fā);所述服務(wù)端是基于Linux操作系統(tǒng),使用C語(yǔ)言開發(fā)的ServerApp,用于處理代理服務(wù)端轉(zhuǎn)發(fā)過(guò)來(lái)的請(qǐng)求。所述客戶端、代理服務(wù)端、服務(wù)端遵守相同的通信協(xié)議。本方案中的應(yīng)用層是根據(jù)業(yè)務(wù)規(guī)則自行定義的協(xié)議,傳輸層使用的是TCP協(xié)議。本發(fā)明與現(xiàn)有技術(shù)相比,具有如下優(yōu)點(diǎn)和有益效果:1、本發(fā)明提高了終端用戶的接入數(shù)量。2、本發(fā)明提高了服務(wù)端的接入數(shù)量,根據(jù)需要可以隨時(shí)進(jìn)行擴(kuò)展。3、本發(fā)明提高了服務(wù)端的利用效率。4、本發(fā)明適用于多客戶端與多服務(wù)端之間的通信。附圖說(shuō)明圖1為客戶端、代理服務(wù)端、服務(wù)端的布置示意圖。圖2為本發(fā)明所述一種基于IOCP機(jī)制實(shí)現(xiàn)網(wǎng)絡(luò)服務(wù)代理的方法的流程圖。具體實(shí)施方式下面結(jié)合實(shí)施例及附圖對(duì)本發(fā)明作進(jìn)一步詳細(xì)的描述,但本發(fā)明的實(shí)施方式不限于此。如圖1所示,本發(fā)明的部署后的結(jié)構(gòu)圖,整套結(jié)構(gòu)分為了客戶端、代理服務(wù)端、服務(wù)器端。代理服務(wù)最包括三個(gè)最核心的功能模塊:并發(fā)請(qǐng)求的接入、請(qǐng)求的過(guò)濾(保護(hù)后臺(tái)服務(wù)器)、請(qǐng)求分發(fā)(負(fù)載均衡,提高處理效率)。如圖2所示為IOCP的使用方法步驟:調(diào)用CreateIOCompletionPort()函數(shù)創(chuàng)建一個(gè)完成端口,而且在一般情況下只需要建立這一個(gè)完成端口。根據(jù)系統(tǒng)中有多少個(gè)處理器,就建立多少個(gè)工作者線程,這幾個(gè)線程是專門用來(lái)和客戶端、服務(wù)端進(jìn)行通信的。創(chuàng)建一個(gè)用于監(jiān)聽的Socket,綁定到完成端口上,然后開始在指定的端口上監(jiān)聽連接請(qǐng)求。在上面這個(gè)監(jiān)聽Socket上投遞AcceptEx請(qǐng)求。工作者線程的任務(wù)是處理具體的通信事務(wù),它會(huì)去監(jiān)聽完成端口的隊(duì)列中是否有完成的網(wǎng)絡(luò)操作,一旦完成端口上出現(xiàn)了已完成的I/O請(qǐng)求,那么等待的線程會(huì)被立刻喚醒,處理到來(lái)的操作。當(dāng)收到Accept通知時(shí),和普通的Socket通訊方式一樣需要做三件事情:先要為新連入的連接分配一個(gè)Socket,然后在這個(gè)Socket上投遞第一個(gè)異步的發(fā)送與接收請(qǐng)求,完成之后繼續(xù)監(jiān)聽。在此過(guò)程中會(huì)記錄新連入Socket的Ip與端口號(hào)。當(dāng)收到Recv通知時(shí),根據(jù)自定義協(xié)議規(guī)則去判斷出當(dāng)前操作的類型,如果是請(qǐng)求解密,工作者線程會(huì)在緩存中查找一個(gè)空閑的解密機(jī)進(jìn)行發(fā)送;如果請(qǐng)求是上報(bào)任務(wù)結(jié)果,工作者線程會(huì)提取出相應(yīng)的客戶端信息然后進(jìn)行轉(zhuǎn)發(fā);如果是上報(bào)當(dāng)前服務(wù)狀況,工作者線程會(huì)將上報(bào)的信息更新到緩存中。關(guān)閉完成端口,釋放所有資源。負(fù)載均衡的核心部分是負(fù)載均衡算法,它的主要工作是將任務(wù)合理地分配到服務(wù)節(jié)點(diǎn)上,使服務(wù)節(jié)點(diǎn)比較均衡地承擔(dān)任務(wù),從而實(shí)現(xiàn)整個(gè)系統(tǒng)的負(fù)載平衡性,提高系統(tǒng)的處理能力和服務(wù)質(zhì)量。每個(gè)服務(wù)節(jié)點(diǎn)發(fā)送給代理服務(wù)器的消息結(jié)構(gòu)如下:TypedefstructtagSERVERINFO{CharszIp[16];//服務(wù)節(jié)點(diǎn)的IP地址DWORDdwLastTime;//代理服務(wù)器收到這些信息的時(shí)間UINTfUsges;//服務(wù)節(jié)點(diǎn)的使用率}代理服務(wù)器保存一個(gè)全局的鏈表,稱之為服務(wù)節(jié)點(diǎn)信息鏈表,鏈表中每個(gè)節(jié)點(diǎn)都是上述的一個(gè)數(shù)據(jù)結(jié)構(gòu),表示當(dāng)前所有可用的服務(wù)節(jié)點(diǎn)信息,這此信息會(huì)被時(shí)實(shí)更新,根據(jù)這些信息采用合適的算法計(jì)算出當(dāng)前負(fù)載最小的節(jié)點(diǎn)。上述實(shí)施例為本發(fā)明較佳的實(shí)施方式,但本發(fā)明的實(shí)施方式并不受上述實(shí)施例的限制,其他的任何未背離本發(fā)明的精神實(shí)質(zhì)與原理下所作的改變、修飾、替代、組合、簡(jiǎn)化,均應(yīng)為等效的置換方式,都包含在本發(fā)明的保護(hù)范圍之內(nèi)。當(dāng)前第1頁(yè)1 2 3 
當(dāng)前第1頁(yè)1 2 3 
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1