本發(fā)明實(shí)施例涉及信息處理技術(shù),尤其涉及一種網(wǎng)絡(luò)請(qǐng)求的中轉(zhuǎn)方法和裝置。
背景技術(shù):
網(wǎng)絡(luò)資源訪(fǎng)問(wèn)是互聯(lián)網(wǎng)發(fā)展離不開(kāi)的一項(xiàng)技術(shù),很多應(yīng)用場(chǎng)景都伴隨著網(wǎng)絡(luò)資源訪(fǎng)問(wèn)的發(fā)生,如訪(fǎng)問(wèn)網(wǎng)站、下載文件以及即時(shí)通訊等。然而,由于網(wǎng)絡(luò)條件時(shí)常不夠穩(wěn)定或者網(wǎng)絡(luò)環(huán)境不同導(dǎo)致的訪(fǎng)問(wèn)速度低下,很多網(wǎng)絡(luò)服務(wù)公司都會(huì)提供基于中轉(zhuǎn)服務(wù)器的網(wǎng)絡(luò)資源訪(fǎng)問(wèn)加速服務(wù),從而讓用戶(hù)可以更加穩(wěn)定和高速地進(jìn)行網(wǎng)絡(luò)資源訪(fǎng)問(wèn)。
在大量用戶(hù)需要使用上述服務(wù)的情況下,中轉(zhuǎn)服務(wù)器就需要提供高并發(fā)的網(wǎng)絡(luò)請(qǐng)求中轉(zhuǎn)服務(wù),以支持大規(guī)模用戶(hù)的同時(shí)使用。為了實(shí)現(xiàn)對(duì)于高并發(fā)的支持,目前主流的方案是提高中轉(zhuǎn)服務(wù)器的硬件性能,如處理器、網(wǎng)絡(luò)帶寬等,以同時(shí)處理大規(guī)模的用戶(hù)請(qǐng)求。
但是,硬件性能的提高往往需要投入更多的成本,且在硬件性能無(wú)法繼續(xù)提高的情況下,現(xiàn)有技術(shù)無(wú)法為我們提供其他有效的實(shí)現(xiàn)方式,以提高中轉(zhuǎn)服務(wù)器的高并發(fā)性能。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明實(shí)施例提供了一種網(wǎng)絡(luò)請(qǐng)求的中轉(zhuǎn)方法和裝置,以提供一種以軟件方式提高中轉(zhuǎn)服務(wù)器高并發(fā)性能的新方法。
第一方面,本發(fā)明實(shí)施例提供了一種網(wǎng)絡(luò)請(qǐng)求的中轉(zhuǎn)方法,包括:
中轉(zhuǎn)服務(wù)器獲取用戶(hù)發(fā)送的指向代理服務(wù)器的網(wǎng)絡(luò)資源請(qǐng)求;
所述中轉(zhuǎn)服務(wù)器將所述網(wǎng)絡(luò)資源請(qǐng)求分解為兩個(gè)待處理任務(wù),并將所述兩個(gè)待處理任務(wù)添加至本地消息隊(duì)列中,其中,所述兩個(gè)待處理任務(wù)分別指向所述代理服務(wù)器以及所述用戶(hù);
所述中轉(zhuǎn)服務(wù)器通過(guò)線(xiàn)程池中的線(xiàn)程獲取所述本地消息隊(duì)列中的任務(wù),并通過(guò)所述線(xiàn)程使用非阻塞的通信方式對(duì)所述任務(wù)進(jìn)行處理。
進(jìn)一步的,所述中轉(zhuǎn)服務(wù)器將所述網(wǎng)絡(luò)資源請(qǐng)求分解為兩個(gè)待處理任務(wù),并將所述兩個(gè)待處理任務(wù)添加至本地消息隊(duì)列中包括:
所述中轉(zhuǎn)服務(wù)器將所述網(wǎng)絡(luò)資源請(qǐng)求分解為第一待處理任務(wù)以及第二待處理任務(wù);
其中,所述第一待處理任務(wù),指向所述代理服務(wù)器,用于向所述代理服務(wù)器請(qǐng)求所述用戶(hù)所需的網(wǎng)絡(luò)資源,所述第二待處理任務(wù),指向所述用戶(hù),用于向所述用戶(hù)轉(zhuǎn)發(fā)所述代理服務(wù)器返回的網(wǎng)絡(luò)資源;
所述中轉(zhuǎn)服務(wù)器將與各所述待處理任務(wù)分別對(duì)應(yīng)的任務(wù)處理參數(shù)附加在對(duì)應(yīng)的待處理任務(wù)中;
所述中轉(zhuǎn)服務(wù)器將添加所述任務(wù)處理參數(shù)后的所述兩個(gè)待處理任務(wù)分別添加至所述本地消息隊(duì)列的尾部。
進(jìn)一步的,所述任務(wù)處理參數(shù)包括:任務(wù)所需的網(wǎng)絡(luò)連接參數(shù),和/或任務(wù)類(lèi)型。
進(jìn)一步的,所述中轉(zhuǎn)服務(wù)器通過(guò)線(xiàn)程池中的線(xiàn)程獲取所述本地消息隊(duì)列中的任務(wù),包括:
所述中轉(zhuǎn)服務(wù)器通過(guò)線(xiàn)程池中的線(xiàn)程,以阻塞的方式,獲取所述本地消息隊(duì)列中的任務(wù)。
進(jìn)一步的,所述中轉(zhuǎn)服務(wù)器通過(guò)所述線(xiàn)程使用非阻塞的通信方式對(duì)所述任務(wù)進(jìn)行處理,包括:
如果所述中轉(zhuǎn)服務(wù)器通過(guò)所述線(xiàn)程獲取的任務(wù)為指向所述代理服務(wù)器的第一目標(biāo)任務(wù),則通過(guò)所述線(xiàn)程使用非阻塞的通信方式,將所述第一目標(biāo)任務(wù)轉(zhuǎn)發(fā)給所述代理服務(wù)器,以使所述代理服務(wù)器返回用戶(hù)所需的網(wǎng)絡(luò)資源;
如果所述中轉(zhuǎn)服務(wù)器通過(guò)所述線(xiàn)程獲取的任務(wù)為指向用戶(hù)的第二目標(biāo)任務(wù),則通過(guò)所述線(xiàn)程獲取與所述第二目標(biāo)任務(wù)對(duì)應(yīng)的網(wǎng)絡(luò)資源,并使用非阻塞的通信方式,將獲取的所述網(wǎng)絡(luò)資源轉(zhuǎn)發(fā)給對(duì)應(yīng)的用戶(hù)。
在第二方面,本發(fā)明實(shí)施例還提供了一種網(wǎng)絡(luò)請(qǐng)求的中轉(zhuǎn)裝置,配置于中轉(zhuǎn)服務(wù)器中,包括:
網(wǎng)絡(luò)資源請(qǐng)求獲取模塊,用于獲取用戶(hù)發(fā)送的指向代理服務(wù)器的網(wǎng)絡(luò)資源請(qǐng)求;
網(wǎng)絡(luò)資源請(qǐng)求分解模塊,用于將所述網(wǎng)絡(luò)資源請(qǐng)求分解為兩個(gè)待處理任務(wù),并將所述兩個(gè)待處理任務(wù)添加至本地消息隊(duì)列中,其中,所述兩個(gè)待處理任務(wù)分別指向所述代理服務(wù)器以及所述用戶(hù);
任務(wù)處理模塊,用于通過(guò)線(xiàn)程池中的線(xiàn)程獲取所述本地消息隊(duì)列中的任務(wù),并通過(guò)所述線(xiàn)程使用非阻塞的通信方式對(duì)所述任務(wù)進(jìn)行處理。
進(jìn)一步的,所述網(wǎng)絡(luò)資源請(qǐng)求分解模塊,具體用于:
將所述網(wǎng)絡(luò)資源請(qǐng)求分解為第一待處理任務(wù)以及第二待處理任務(wù);
其中,所述第一待處理任務(wù),指向所述代理服務(wù)器,用于向所述代理服務(wù)器請(qǐng)求所述用戶(hù)所需的網(wǎng)絡(luò)資源,所述第二待處理任務(wù),指向所述用戶(hù),用于向所述用戶(hù)轉(zhuǎn)發(fā)所述代理服務(wù)器返回的網(wǎng)絡(luò)資源;
將與各所述待處理任務(wù)分別對(duì)應(yīng)的任務(wù)處理參數(shù)附加在對(duì)應(yīng)的待處理任務(wù)中;
將附加所述任務(wù)處理參數(shù)后的所述兩個(gè)待處理任務(wù)分別添加至所述本地消息隊(duì)列的尾部。
進(jìn)一步的,所述任務(wù)處理參數(shù)包括:任務(wù)所需的網(wǎng)絡(luò)連接參數(shù),和/或任務(wù)類(lèi)型。
進(jìn)一步的,所述任務(wù)處理模塊,進(jìn)一步用于:
通過(guò)線(xiàn)程池中的線(xiàn)程,以阻塞的方式,獲取所述本地消息隊(duì)列中的任務(wù)。
進(jìn)一步的,所述任務(wù)處理模塊,進(jìn)一步用于:
如果通過(guò)所述線(xiàn)程獲取的任務(wù)為指向所述代理服務(wù)器的第一目標(biāo)任務(wù),則通過(guò)所述線(xiàn)程使用非阻塞的通信方式,將所述第一目標(biāo)任務(wù)轉(zhuǎn)發(fā)給所述代理服務(wù)器,以使所述代理服務(wù)器返回用戶(hù)所需的網(wǎng)絡(luò)資源;
如果通過(guò)所述線(xiàn)程獲取的任務(wù)為指向用戶(hù)的第二目標(biāo)任務(wù),則通過(guò)所述線(xiàn)程獲取與所述第二目標(biāo)任務(wù)對(duì)應(yīng)的網(wǎng)絡(luò)資源,并使用非阻塞的通信方式,將獲取的所述網(wǎng)絡(luò)資源轉(zhuǎn)發(fā)給對(duì)應(yīng)的用戶(hù)。
本發(fā)明實(shí)施例提供了一種網(wǎng)絡(luò)請(qǐng)求的中轉(zhuǎn)方法和裝置,中轉(zhuǎn)服務(wù)器將用戶(hù)發(fā)送的一個(gè)向代理服務(wù)器請(qǐng)求網(wǎng)絡(luò)資源的請(qǐng)求,分解兩個(gè)彼此獨(dú)立的待處理任務(wù)后添加至本地消息隊(duì)列中,并通過(guò)線(xiàn)程使用非阻塞的通信方式對(duì)本地消息隊(duì)列中的緩存的任務(wù)進(jìn)行處理,解決了高并發(fā)下,網(wǎng)絡(luò)通信容易阻塞進(jìn)而產(chǎn)生較長(zhǎng)時(shí)延的問(wèn)題,此外,在中轉(zhuǎn)服務(wù)器中使用本地消息隊(duì)列將用戶(hù)的網(wǎng)絡(luò)請(qǐng)求進(jìn)行緩存,再使用線(xiàn)程池的方式通過(guò)多線(xiàn)程對(duì)其進(jìn)行依次處理,可以并發(fā)地處理大規(guī)模的用戶(hù)請(qǐng)求,從而支持多用戶(hù)的高并發(fā)訪(fǎng)問(wèn),同時(shí),本發(fā)明實(shí)施例的技術(shù)方案能夠使網(wǎng)絡(luò)服務(wù)提供商便捷地開(kāi)發(fā)出支持高并發(fā)的網(wǎng)絡(luò)請(qǐng)求中轉(zhuǎn)服務(wù)。
附圖說(shuō)明
圖1是本發(fā)明實(shí)施例一中的一種網(wǎng)絡(luò)請(qǐng)求的中轉(zhuǎn)方法的流程圖;
圖2a是本發(fā)明實(shí)施例二中的一種網(wǎng)絡(luò)請(qǐng)求的中轉(zhuǎn)方法的流程圖;
圖2b是本發(fā)明實(shí)施例所適用的一種網(wǎng)絡(luò)請(qǐng)求中轉(zhuǎn)系統(tǒng)的結(jié)構(gòu)示意圖;
圖3是本發(fā)明實(shí)施例三中的一種網(wǎng)絡(luò)請(qǐng)求的中轉(zhuǎn)裝置的結(jié)構(gòu)圖。
具體實(shí)施方式
下面結(jié)合附圖和實(shí)施例對(duì)本發(fā)明作進(jìn)一步說(shuō)明。可以理解的是,此處所描述的具體實(shí)施例僅僅用于解釋本發(fā)明,而非對(duì)本發(fā)明的限定。另外還需要說(shuō)明的是,為了便于描述,附圖中僅示出了與本發(fā)明相關(guān)的部分而非全部?jī)?nèi)容,除非另有定義,本文所使用的所有技術(shù)和科學(xué)術(shù)語(yǔ)與屬于本發(fā)明的技術(shù)領(lǐng)域的技術(shù)人員通常理解的含義相同。本文中所使用的術(shù)語(yǔ)只是為了描述具體的實(shí)施例,不是旨在于限制本發(fā)明。
另外還需要說(shuō)明的是,為了便于描述,附圖中僅示出了與本發(fā)明相關(guān)的部分而非全部?jī)?nèi)容。在更加詳細(xì)地討論示例性實(shí)施例之前應(yīng)當(dāng)提到的是,一些示例性實(shí)施例被描述成作為流程圖描繪的處理或方法。雖然流程圖將各項(xiàng)操作(或步驟)描述成順序的處理,但是其中的許多操作可以被并行地、并發(fā)地或者同時(shí)實(shí)施。此外,各項(xiàng)操作的順序可以被重新安排。當(dāng)其操作完成時(shí)所述處理可以被終止,但是還可以具有未包括在附圖中的附加步驟。所述處理可以對(duì)應(yīng)于方法、函數(shù)、規(guī)程、子例程、子程序等等。
實(shí)施例一
圖1為本發(fā)明實(shí)施例一提供的一種網(wǎng)絡(luò)請(qǐng)求的中轉(zhuǎn)方法的流程圖,本實(shí)施例可適用于使用中轉(zhuǎn)服務(wù)器提供網(wǎng)絡(luò)資源訪(fǎng)問(wèn)加速服務(wù)的情況,該方法可以由本發(fā)明實(shí)施例提供的網(wǎng)絡(luò)請(qǐng)求的中轉(zhuǎn)裝置來(lái)執(zhí)行,該裝置可采用軟件和/或硬件的方式實(shí)現(xiàn),并一般可集成在中轉(zhuǎn)服務(wù)器中。如圖1所示,本實(shí)施例的方法具體包括:
s110、中轉(zhuǎn)服務(wù)器獲取用戶(hù)發(fā)送的指向代理服務(wù)器的網(wǎng)絡(luò)資源請(qǐng)求。
在本實(shí)施例中,所述中轉(zhuǎn)服務(wù)器在獲取用戶(hù)發(fā)送的網(wǎng)絡(luò)資源請(qǐng)求后,向?qū)?yīng)的代理服務(wù)器獲取所述用戶(hù)請(qǐng)求的資源,之后將該資源轉(zhuǎn)發(fā)至對(duì)應(yīng)的用戶(hù),以使用戶(hù)可以更加穩(wěn)定和高速地進(jìn)行網(wǎng)絡(luò)資源訪(fǎng)問(wèn)。
其中,用戶(hù)向中轉(zhuǎn)服務(wù)器發(fā)送的網(wǎng)絡(luò)請(qǐng)求可以是基于tcp(transmissioncontrolprotocol,傳輸控制協(xié)議)協(xié)議的任何形式,如ftp(filetransferprotocol,文件傳輸協(xié)議)、http(hypertexttransferprotocol),超文本傳輸協(xié)議)和https(hypertexttransferprotocoloversecuresocketlayer,超文本傳輸協(xié)議安全版)等,本實(shí)施例對(duì)此并不進(jìn)行限制。
s120、所述中轉(zhuǎn)服務(wù)器將所述網(wǎng)絡(luò)資源請(qǐng)求分解為兩個(gè)待處理任務(wù),并將所述兩個(gè)待處理任務(wù)添加至本地消息隊(duì)列中。
在現(xiàn)有技術(shù)中,所述中轉(zhuǎn)服務(wù)器在獲取用戶(hù)發(fā)送的一個(gè)網(wǎng)絡(luò)資源請(qǐng)求時(shí),會(huì)將該網(wǎng)絡(luò)資源請(qǐng)求作為一個(gè)整體進(jìn)行處理,對(duì)于中轉(zhuǎn)服務(wù)器中的一個(gè)線(xiàn)程來(lái)說(shuō),在該線(xiàn)程當(dāng)前處理的網(wǎng)絡(luò)資源請(qǐng)求沒(méi)有處理完成前,其不能處理其他任務(wù)。
現(xiàn)有技術(shù)的上述設(shè)置會(huì)有一個(gè)比較明顯的缺陷,例如,當(dāng)中轉(zhuǎn)服務(wù)器端到代理服務(wù)器端的網(wǎng)絡(luò)發(fā)生故障,而中轉(zhuǎn)服務(wù)器端到用戶(hù)端的網(wǎng)絡(luò)完好時(shí),由于必須將一個(gè)網(wǎng)絡(luò)資源請(qǐng)求作為一個(gè)整體進(jìn)行處理,則整個(gè)系統(tǒng)都會(huì)等待中轉(zhuǎn)服務(wù)器端到代理服務(wù)器端的網(wǎng)絡(luò)完好后才能持續(xù)處理,而無(wú)法正常使用中轉(zhuǎn)服務(wù)器端到用戶(hù)端的網(wǎng)絡(luò)。
基于此,發(fā)明人創(chuàng)造性的提出將所述網(wǎng)絡(luò)資源請(qǐng)求分解為兩個(gè)待處理任務(wù)的方案,從而在軟件上提高中轉(zhuǎn)服務(wù)器的高并發(fā)性能。
其中,所述兩個(gè)待處理任務(wù)分別指向所述代理服務(wù)器以及所述用戶(hù)。也即:一個(gè)待處理任務(wù)用于向代理服務(wù)器請(qǐng)求用戶(hù)所需的網(wǎng)絡(luò)資源(指向所述代理服務(wù)器),一個(gè)待處理用于向用戶(hù)轉(zhuǎn)發(fā)代理服務(wù)器反饋的網(wǎng)絡(luò)資源(指向用戶(hù))。上述兩個(gè)待處理任務(wù)之間彼此獨(dú)立,沒(méi)有任何依賴(lài)關(guān)系,基于此,可以將一個(gè)網(wǎng)絡(luò)資源請(qǐng)求分解為兩個(gè)待處理任務(wù),以實(shí)現(xiàn)將中轉(zhuǎn)服務(wù)器到代理服務(wù)器端的網(wǎng)絡(luò)性能,與中轉(zhuǎn)服務(wù)器到用戶(hù)端的網(wǎng)絡(luò)性能獨(dú)立開(kāi)來(lái)。
s130、所述中轉(zhuǎn)服務(wù)器通過(guò)線(xiàn)程池中的線(xiàn)程獲取所述本地消息隊(duì)列中的任務(wù),并通過(guò)所述線(xiàn)程使用非阻塞的通信方式對(duì)所述任務(wù)進(jìn)行處理。
其中,所述中轉(zhuǎn)服務(wù)器的線(xiàn)程池中維護(hù)了多個(gè)用于處理任務(wù)的線(xiàn)程,每個(gè)空閑的線(xiàn)程可以按照先進(jìn)先出的處理機(jī)制從本地消息隊(duì)列中緩存的待處理任務(wù)中獲取一個(gè)任務(wù)進(jìn)行處理。
在本實(shí)施例中,所述非阻塞的通信方式具體是指一個(gè)線(xiàn)程在處理完一個(gè)任務(wù)之前,如果該任務(wù)因?yàn)楦鞣N原因未能成功處理完成,則該進(jìn)程可以中斷對(duì)該任務(wù)的處理,而重新處理新的任務(wù)。相對(duì)應(yīng)的,阻塞的通信方式具體是指,一個(gè)線(xiàn)程在處理完成一個(gè)任務(wù)之前,不會(huì)去處理一個(gè)新的任務(wù)。
在本實(shí)施例中,中轉(zhuǎn)服務(wù)器通過(guò)所述線(xiàn)程使用非阻塞的socket(套接字)通信方式,以支持所有基于tcp的網(wǎng)絡(luò)傳輸協(xié)議。這樣設(shè)置的好處是:非阻塞的通信方式使得網(wǎng)絡(luò)數(shù)據(jù)的發(fā)送以及接收更為高效,即使當(dāng)前線(xiàn)程沒(méi)有處理好當(dāng)前的網(wǎng)絡(luò)數(shù)據(jù),也不會(huì)影響后續(xù)網(wǎng)絡(luò)數(shù)據(jù)的發(fā)送和接收。
本發(fā)明實(shí)施例提供了一種網(wǎng)絡(luò)請(qǐng)求的中轉(zhuǎn)方法,中轉(zhuǎn)服務(wù)器將用戶(hù)發(fā)送的一個(gè)向代理服務(wù)器請(qǐng)求網(wǎng)絡(luò)資源的請(qǐng)求,分解兩個(gè)彼此獨(dú)立的待處理任務(wù)后添加至本地消息隊(duì)列中,并通過(guò)線(xiàn)程使用非阻塞的通信方式對(duì)本地消息隊(duì)列中的緩存的任務(wù)進(jìn)行處理,解決了高并發(fā)下,網(wǎng)絡(luò)通信容易阻塞進(jìn)而產(chǎn)生較長(zhǎng)時(shí)延的問(wèn)題,此外,在中轉(zhuǎn)服務(wù)器中使用本地消息隊(duì)列將用戶(hù)的網(wǎng)絡(luò)請(qǐng)求進(jìn)行緩存,再使用線(xiàn)程池的方式通過(guò)多線(xiàn)程對(duì)其進(jìn)行依次處理,可以并發(fā)地處理大規(guī)模的用戶(hù)請(qǐng)求,從而支持多用戶(hù)的高并發(fā)訪(fǎng)問(wèn),同時(shí),本發(fā)明實(shí)施例的技術(shù)方案能夠使網(wǎng)絡(luò)服務(wù)提供商便捷地開(kāi)發(fā)出支持高并發(fā)的網(wǎng)絡(luò)請(qǐng)求中轉(zhuǎn)服務(wù)。
實(shí)施例二
圖2a是本發(fā)明實(shí)施例二提供的一種網(wǎng)絡(luò)請(qǐng)求的中轉(zhuǎn)方法的流程圖,本實(shí)施例以上述實(shí)施例為基礎(chǔ)進(jìn)行優(yōu)化,在本實(shí)施例中,將所述中轉(zhuǎn)服務(wù)器將所述網(wǎng)絡(luò)資源請(qǐng)求分解為兩個(gè)待處理任務(wù),并將所述兩個(gè)待處理任務(wù)添加至本地消息隊(duì)列中具體優(yōu)化為:所述中轉(zhuǎn)服務(wù)器將所述網(wǎng)絡(luò)資源請(qǐng)求分解為第一待處理任務(wù)以及第二待處理任務(wù);所述中轉(zhuǎn)服務(wù)器將與各所述待處理任務(wù)分別對(duì)應(yīng)的任務(wù)處理參數(shù)附加在對(duì)應(yīng)的待處理任務(wù)中;所述中轉(zhuǎn)服務(wù)器將添加所述任務(wù)處理參數(shù)后的所述兩個(gè)待處理任務(wù)分別添加至所述本地消息隊(duì)列的尾部;
以及,將所述中轉(zhuǎn)服務(wù)器通過(guò)線(xiàn)程池中的線(xiàn)程獲取所述本地消息隊(duì)列中的任務(wù),具體優(yōu)化為:所述中轉(zhuǎn)服務(wù)器通過(guò)線(xiàn)程池中的線(xiàn)程,以阻塞的方式,獲取所述本地消息隊(duì)列中的任務(wù);
同時(shí),將所述中轉(zhuǎn)服務(wù)器通過(guò)所述線(xiàn)程使用非阻塞的通信方式對(duì)所述任務(wù)進(jìn)行處理,具體優(yōu)化為:如果所述中轉(zhuǎn)服務(wù)器通過(guò)所述線(xiàn)程獲取的任務(wù)為指向所述代理服務(wù)器的第一目標(biāo)任務(wù),則通過(guò)所述線(xiàn)程使用非阻塞的通信方式,將所述第一目標(biāo)任務(wù)轉(zhuǎn)發(fā)給所述代理服務(wù)器,以使所述代理服務(wù)器返回用戶(hù)所需的網(wǎng)絡(luò)資源;如果所述中轉(zhuǎn)服務(wù)器通過(guò)所述線(xiàn)程獲取的任務(wù)為指向用戶(hù)的第二目標(biāo)任務(wù),則通過(guò)所述線(xiàn)程獲取與所述第二目標(biāo)任務(wù)對(duì)應(yīng)的網(wǎng)絡(luò)資源,并使用非阻塞的通信方式,將獲取的所述網(wǎng)絡(luò)資源轉(zhuǎn)發(fā)給對(duì)應(yīng)的用戶(hù)。
相應(yīng)的,本實(shí)施例的方法具體包括:
s210、中轉(zhuǎn)服務(wù)器獲取用戶(hù)發(fā)送的指向代理服務(wù)器的網(wǎng)絡(luò)資源請(qǐng)求。
s220、所述中轉(zhuǎn)服務(wù)器將所述網(wǎng)絡(luò)資源請(qǐng)求分解為第一待處理任務(wù)以及第二待處理任務(wù)。
其中,所述第一待處理任務(wù),指向所述代理服務(wù)器,用于向所述代理服務(wù)器請(qǐng)求所述用戶(hù)所需的網(wǎng)絡(luò)資源,所述第二待處理任務(wù),指向所述用戶(hù),用于向所述用戶(hù)轉(zhuǎn)發(fā)所述代理服務(wù)器返回的網(wǎng)絡(luò)資源。
s230、所述中轉(zhuǎn)服務(wù)器將與各所述待處理任務(wù)分別對(duì)應(yīng)的任務(wù)處理參數(shù)附加在對(duì)應(yīng)的待處理任務(wù)中。
在本實(shí)施例中,所述任務(wù)處理參數(shù)包括:任務(wù)所需的網(wǎng)絡(luò)連接參數(shù),和/或任務(wù)類(lèi)型。
s240、所述中轉(zhuǎn)服務(wù)器將添加所述任務(wù)處理參數(shù)后的所述兩個(gè)待處理任務(wù)分別添加至所述本地消息隊(duì)列的尾部。
在本實(shí)施例中,中轉(zhuǎn)服務(wù)器根據(jù)網(wǎng)絡(luò)數(shù)據(jù)的傳輸方向?qū)⒄麄€(gè)中轉(zhuǎn)服務(wù)分解為兩類(lèi)任務(wù),第一類(lèi)任務(wù)接受用戶(hù)的網(wǎng)絡(luò)資源請(qǐng)求并轉(zhuǎn)發(fā)至代理服務(wù)器,第二類(lèi)任務(wù)接受代理服務(wù)器的數(shù)據(jù)(也即,網(wǎng)絡(luò)資源)并返回給用戶(hù)。這兩類(lèi)任務(wù)之間互相沒(méi)有依賴(lài)關(guān)系,是非阻塞的形式。
相應(yīng)的,一個(gè)網(wǎng)絡(luò)資源請(qǐng)求會(huì)被分解為兩個(gè)任務(wù),一類(lèi)任務(wù)各一個(gè)。在分解完任務(wù)后,中轉(zhuǎn)服務(wù)器將每個(gè)任務(wù)中所需的網(wǎng)絡(luò)連接、任務(wù)類(lèi)型作為相關(guān)數(shù)據(jù)和任務(wù)一起添加進(jìn)本地消息隊(duì)列尾部,該本地消息隊(duì)列用以緩存所有需要處理的任務(wù)及其所需的數(shù)據(jù)。
s250、所述中轉(zhuǎn)服務(wù)器通過(guò)線(xiàn)程池中的線(xiàn)程,以阻塞的方式,獲取所述本地消息隊(duì)列中的任務(wù)。
在本實(shí)施例中,中轉(zhuǎn)服務(wù)器的線(xiàn)程池中維護(hù)了若干個(gè)用以實(shí)際處理任務(wù)的線(xiàn)程,這些線(xiàn)程將不斷地從本地消息隊(duì)列中取出所需執(zhí)行的任務(wù)及相關(guān)數(shù)據(jù),當(dāng)本地消息隊(duì)列中沒(méi)有任何任務(wù)時(shí),線(xiàn)程將處于阻塞狀態(tài),從而不產(chǎn)生系統(tǒng)資源的消耗。
s260、所述中轉(zhuǎn)服務(wù)器通過(guò)所述線(xiàn)程判斷獲取的任務(wù)類(lèi)型:如果通過(guò)所述線(xiàn)程獲取的任務(wù)為指向所述代理服務(wù)器的第一目標(biāo)任務(wù),則執(zhí)行s270;如果通過(guò)所述線(xiàn)程獲取的任務(wù)為指向用戶(hù)的第二目標(biāo)任務(wù),則執(zhí)行s280。
s270、所述中轉(zhuǎn)服務(wù)器通過(guò)所述線(xiàn)程使用非阻塞的通信方式,將所述第一目標(biāo)任務(wù)轉(zhuǎn)發(fā)給所述代理服務(wù)器,以使所述代理服務(wù)器返回用戶(hù)所需的網(wǎng)絡(luò)資源。
在本實(shí)施例中,在中轉(zhuǎn)服務(wù)器通過(guò)所述線(xiàn)程獲取的任務(wù)為指向所述代理服務(wù)器的第一目標(biāo)任務(wù)時(shí),則將第一目標(biāo)任務(wù)以非阻塞的通信方式,發(fā)送給代理服務(wù)器。
其中,所述代理服務(wù)器在接收到第一目標(biāo)任務(wù)后,實(shí)時(shí)獲取用戶(hù)所請(qǐng)求的網(wǎng)絡(luò)資源。具體的,在所述代理服務(wù)器接收到所述第一目標(biāo)任務(wù)后,利用所述代理服務(wù)器本地的網(wǎng)絡(luò)代理模塊,完成對(duì)所述第一目標(biāo)任務(wù)所請(qǐng)求的網(wǎng)絡(luò)資源的獲取。之后,所述代理服務(wù)器可以同樣使用非阻塞的通信方式,將網(wǎng)絡(luò)資源返回給中轉(zhuǎn)服務(wù)器中的線(xiàn)程。
s280、所述中轉(zhuǎn)服務(wù)器通過(guò)所述線(xiàn)程獲取與所述第二目標(biāo)任務(wù)對(duì)應(yīng)的網(wǎng)絡(luò)資源,并使用非阻塞的通信方式,將獲取的所述網(wǎng)絡(luò)資源轉(zhuǎn)發(fā)給對(duì)應(yīng)的用戶(hù)。
本發(fā)明實(shí)施例提供了一種網(wǎng)絡(luò)請(qǐng)求的中轉(zhuǎn)方法,中轉(zhuǎn)服務(wù)器將用戶(hù)發(fā)送的一個(gè)向代理服務(wù)器請(qǐng)求網(wǎng)絡(luò)資源的請(qǐng)求,分解兩個(gè)彼此獨(dú)立的待處理任務(wù)后添加至本地消息隊(duì)列中,并通過(guò)線(xiàn)程使用非阻塞的通信方式對(duì)本地消息隊(duì)列中的緩存的任務(wù)進(jìn)行處理,解決了高并發(fā)下,網(wǎng)絡(luò)通信容易阻塞進(jìn)而產(chǎn)生較長(zhǎng)時(shí)延的問(wèn)題,此外,在中轉(zhuǎn)服務(wù)器中使用本地消息隊(duì)列將用戶(hù)的網(wǎng)絡(luò)請(qǐng)求進(jìn)行緩存,再使用線(xiàn)程池的方式通過(guò)多線(xiàn)程對(duì)其進(jìn)行依次處理,可以并發(fā)地處理大規(guī)模的用戶(hù)請(qǐng)求,從而支持多用戶(hù)的高并發(fā)訪(fǎng)問(wèn),同時(shí),本發(fā)明實(shí)施例的技術(shù)方案能夠使網(wǎng)絡(luò)服務(wù)提供商便捷地開(kāi)發(fā)出支持高并發(fā)的網(wǎng)絡(luò)請(qǐng)求中轉(zhuǎn)服務(wù)。
進(jìn)一步的,本實(shí)施例中通過(guò)線(xiàn)程池中的線(xiàn)程,以阻塞的方式,獲取所述本地消息隊(duì)列中的任務(wù),可以進(jìn)一步減少系統(tǒng)資源的浪費(fèi)。
具體應(yīng)用場(chǎng)景
圖2b是本發(fā)明實(shí)施例所適用的一種網(wǎng)絡(luò)請(qǐng)求中轉(zhuǎn)系統(tǒng)的結(jié)構(gòu)示意圖。如圖2b所示,該系統(tǒng)包括:
用戶(hù)交互模塊,用于實(shí)現(xiàn)和用戶(hù)之間的通信交互,在接收到用戶(hù)對(duì)網(wǎng)絡(luò)資源的訪(fǎng)問(wèn)請(qǐng)求后,將其分解為彼此獨(dú)立的兩個(gè)任務(wù),發(fā)送給消息隊(duì)列;
消息隊(duì)列,用于緩存用戶(hù)交互模塊發(fā)送來(lái)的任務(wù),并提供給線(xiàn)程池中的線(xiàn)程;
線(xiàn)程池,用于管理線(xiàn)程,負(fù)責(zé)維護(hù)全部線(xiàn)程的生命周期;當(dāng)系統(tǒng)被初始化時(shí),完成對(duì)全部線(xiàn)程的創(chuàng)建工作;在線(xiàn)程運(yùn)行過(guò)程中,負(fù)責(zé)調(diào)度線(xiàn)程獲取并完成消息隊(duì)列中的任務(wù);
線(xiàn)程,用于獲取和完成消息隊(duì)列中的任務(wù);采用阻塞的形式向消息隊(duì)列獲取其中的任務(wù),當(dāng)消息隊(duì)列為空時(shí),該線(xiàn)程將被阻塞直到消息隊(duì)列不為空;當(dāng)獲消息隊(duì)列不為空時(shí),獲取其中最新的一條任務(wù),然后根據(jù)任務(wù)需求使用非阻塞的通信方式與網(wǎng)絡(luò)代理模塊進(jìn)行通信以完成任務(wù);
網(wǎng)絡(luò)代理模塊,用于接受線(xiàn)程發(fā)送過(guò)來(lái)的任務(wù),并實(shí)際完成相關(guān)的網(wǎng)絡(luò)請(qǐng)求然后返回給線(xiàn)程。
實(shí)施例三
圖3為本發(fā)明實(shí)施例三提供的一種網(wǎng)絡(luò)請(qǐng)求的中轉(zhuǎn)裝置的結(jié)構(gòu)示意圖,所述裝置配置于中轉(zhuǎn)服務(wù)器中,如圖3所示,所述裝置包括:網(wǎng)絡(luò)資源請(qǐng)求獲取模塊310、網(wǎng)絡(luò)資源請(qǐng)求分解模塊320、以及任務(wù)處理模塊330。其中:
網(wǎng)絡(luò)資源請(qǐng)求獲取模塊310,用于獲取用戶(hù)發(fā)送的指向代理服務(wù)器的網(wǎng)絡(luò)資源請(qǐng)求。
網(wǎng)絡(luò)資源請(qǐng)求分解模塊320,用于將所述網(wǎng)絡(luò)資源請(qǐng)求分解為兩個(gè)待處理任務(wù),并將所述兩個(gè)待處理任務(wù)添加至本地消息隊(duì)列中,其中,所述兩個(gè)待處理任務(wù)分別指向所述代理服務(wù)器以及所述用戶(hù)。
任務(wù)處理模塊330,用于通過(guò)線(xiàn)程池中的線(xiàn)程獲取所述本地消息隊(duì)列中的任務(wù),并通過(guò)所述線(xiàn)程使用非阻塞的通信方式對(duì)所述任務(wù)進(jìn)行處理。
本發(fā)明實(shí)施例提供了一種網(wǎng)絡(luò)請(qǐng)求的中轉(zhuǎn)裝置,中轉(zhuǎn)服務(wù)器將用戶(hù)發(fā)送的一個(gè)向代理服務(wù)器請(qǐng)求網(wǎng)絡(luò)資源的請(qǐng)求,分解兩個(gè)彼此獨(dú)立的待處理任務(wù)后添加至本地消息隊(duì)列中,并通過(guò)線(xiàn)程使用非阻塞的通信方式對(duì)本地消息隊(duì)列中的緩存的任務(wù)進(jìn)行處理,解決了高并發(fā)下,網(wǎng)絡(luò)通信容易阻塞進(jìn)而產(chǎn)生較長(zhǎng)時(shí)延的問(wèn)題,此外,在中轉(zhuǎn)服務(wù)器中使用本地消息隊(duì)列將用戶(hù)的網(wǎng)絡(luò)請(qǐng)求進(jìn)行緩存,再使用線(xiàn)程池的方式通過(guò)多線(xiàn)程對(duì)其進(jìn)行依次處理,可以并發(fā)地處理大規(guī)模的用戶(hù)請(qǐng)求,從而支持多用戶(hù)的高并發(fā)訪(fǎng)問(wèn),同時(shí),本發(fā)明實(shí)施例的技術(shù)方案能夠使網(wǎng)絡(luò)服務(wù)提供商便捷地開(kāi)發(fā)出支持高并發(fā)的網(wǎng)絡(luò)請(qǐng)求中轉(zhuǎn)服務(wù)。
在上述各實(shí)施例的基礎(chǔ)上,所述網(wǎng)絡(luò)資源請(qǐng)求分解模塊,具體可以用于:
將所述網(wǎng)絡(luò)資源請(qǐng)求分解為第一待處理任務(wù)以及第二待處理任務(wù);
其中,所述第一待處理任務(wù),指向所述代理服務(wù)器,用于向所述代理服務(wù)器請(qǐng)求所述用戶(hù)所需的網(wǎng)絡(luò)資源,所述第二待處理任務(wù),指向所述用戶(hù),用于向所述用戶(hù)轉(zhuǎn)發(fā)所述代理服務(wù)器返回的網(wǎng)絡(luò)資源;
將與各所述待處理任務(wù)分別對(duì)應(yīng)的任務(wù)處理參數(shù)附加在對(duì)應(yīng)的待處理任務(wù)中;
將附加所述任務(wù)處理參數(shù)后的所述兩個(gè)待處理任務(wù)分別添加至所述本地消息隊(duì)列的尾部。
在上述各實(shí)施例的基礎(chǔ)上,所述任務(wù)處理參數(shù)可以包括:任務(wù)所需的網(wǎng)絡(luò)連接參數(shù),和/或任務(wù)類(lèi)型。
在上述各實(shí)施例的基礎(chǔ)上,所述任務(wù)處理模塊,進(jìn)一步可以用于:
通過(guò)線(xiàn)程池中的線(xiàn)程,以阻塞的方式,獲取所述本地消息隊(duì)列中的任務(wù)。
在上述各實(shí)施例的基礎(chǔ)上,所述任務(wù)處理模塊,進(jìn)一步可以用于:
如果通過(guò)所述線(xiàn)程獲取的任務(wù)為指向所述代理服務(wù)器的第一目標(biāo)任務(wù),則通過(guò)所述線(xiàn)程使用非阻塞的通信方式,將所述第一目標(biāo)任務(wù)轉(zhuǎn)發(fā)給所述代理服務(wù)器,以使所述代理服務(wù)器返回用戶(hù)所需的網(wǎng)絡(luò)資源;
如果通過(guò)所述線(xiàn)程獲取的任務(wù)為指向用戶(hù)的第二目標(biāo)任務(wù),則通過(guò)所述線(xiàn)程獲取與所述第二目標(biāo)任務(wù)對(duì)應(yīng)的網(wǎng)絡(luò)資源,并使用非阻塞的通信方式,將獲取的所述網(wǎng)絡(luò)資源轉(zhuǎn)發(fā)給對(duì)應(yīng)的用戶(hù)。
上述網(wǎng)絡(luò)請(qǐng)求的中轉(zhuǎn)裝置可執(zhí)行本發(fā)明任意實(shí)施例所提供的網(wǎng)絡(luò)請(qǐng)求的中轉(zhuǎn)方法,具備執(zhí)行網(wǎng)絡(luò)請(qǐng)求的中轉(zhuǎn)方法相應(yīng)的功能模塊和有益效果。
本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例方法中的全部或部分流程,是可以通過(guò)計(jì)算機(jī)程序來(lái)指令相關(guān)的硬件來(lái)完成,所述的程序可存儲(chǔ)于一計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中,該程序在執(zhí)行時(shí),可包括如上述各方法的實(shí)施例的流程。其中,所述的存儲(chǔ)介質(zhì)可為磁碟、光盤(pán)、只讀存儲(chǔ)記憶體(read-onlymemory,rom)或隨機(jī)存儲(chǔ)記憶體(randomaccessmemory,ram)等。
注意,上述僅為本發(fā)明的較佳實(shí)施例及所運(yùn)用技術(shù)原理。本領(lǐng)域技術(shù)人員會(huì)理解,本發(fā)明不限于這里所述的特定實(shí)施例,對(duì)本領(lǐng)域技術(shù)人員來(lái)說(shuō)能夠進(jìn)行各種明顯的變化、重新調(diào)整和替代而不會(huì)脫離本發(fā)明的保護(hù)范圍。因此,雖然通過(guò)以上實(shí)施例對(duì)本發(fā)明進(jìn)行了較為詳細(xì)的說(shuō)明,但是本發(fā)明不僅僅限于以上實(shí)施例,在不脫離本發(fā)明構(gòu)思的情況下,還可以包括更多其他等效實(shí)施例,而本發(fā)明的范圍由所附的權(quán)利要求范圍決定。