本發(fā)明涉及網(wǎng)絡(luò)通信技術(shù),尤其涉及一種通信處理方法及裝置。
背景技術(shù):
網(wǎng)絡(luò)服務(wù)器根據(jù)超文本傳輸協(xié)議解析客戶端的請求,通過公共網(wǎng)關(guān)接口程序?qū)φ埱筮M(jìn)行響應(yīng),一個靜態(tài)頁面或圖片,進(jìn)行頁面跳轉(zhuǎn)(redirect),或者把動態(tài)響應(yīng)(dynamic response)的產(chǎn)生委托(delegate)給一些其它的程序,或者一些其它的服務(wù)器端技術(shù)以產(chǎn)生一個響應(yīng)(response)來讓瀏覽器可以瀏覽。
在上述過程中,客戶端與網(wǎng)絡(luò)服務(wù)器的進(jìn)程建立短連接,通過短連接向網(wǎng)絡(luò)服務(wù)器的進(jìn)程發(fā)送請求,接收網(wǎng)絡(luò)服務(wù)器返回的攜帶處理結(jié)果的響應(yīng)。
客戶端與網(wǎng)絡(luò)服務(wù)器的進(jìn)程之間通過建立短連接的方式發(fā)送調(diào)用公共網(wǎng)關(guān)接口程序的請求,也就是說,客戶端在需要向網(wǎng)絡(luò)服務(wù)器的進(jìn)程發(fā)送請求時才與網(wǎng)絡(luò)服務(wù)器的進(jìn)程建立連接并發(fā)送請求,客戶端通過短連接在獲得網(wǎng)絡(luò)服務(wù)器的進(jìn)程返回的針對請求的處理結(jié)果后,客戶端與網(wǎng)絡(luò)服務(wù)器之間即釋放連接,可見,連接僅用于客戶端與網(wǎng)絡(luò)服務(wù)器的進(jìn)程之間的一次業(yè)務(wù)的數(shù)據(jù)傳輸。
客戶端與網(wǎng)絡(luò)服務(wù)器的進(jìn)程之間的這種業(yè)務(wù)處理方式存在以下問題:
1)網(wǎng)絡(luò)服務(wù)器為了支持大量客戶端的業(yè)務(wù),需要與客戶端之間頻繁建立短連接以供客戶端調(diào)用公共網(wǎng)關(guān)接口程序并釋放無用的短連接,處理效率低,造成了對網(wǎng)絡(luò)服務(wù)器資源的大量占用;
2)客戶端向網(wǎng)絡(luò)服務(wù)器頻繁傳輸?shù)恼埱?,會占用客戶端與網(wǎng)絡(luò)服務(wù)器之間的大量通信帶寬。
綜上所述,對于提升客戶端向網(wǎng)絡(luò)服務(wù)器發(fā)起請求的效率、并節(jié)約網(wǎng)絡(luò)服務(wù)器與客戶端之間的通信帶寬,相關(guān)技術(shù)尚無有效解決方案。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明實(shí)施例提供一種通信處理方法及裝置,能夠提升客戶端向網(wǎng)絡(luò)服務(wù)器發(fā)起請求的效率、節(jié)約網(wǎng)絡(luò)服務(wù)器與客戶端之間的通信帶寬。
本發(fā)明實(shí)施例的技術(shù)方案是這樣實(shí)現(xiàn)的:
第一方面,本發(fā)明實(shí)施例提供一種通信處理方法,包括:
在網(wǎng)絡(luò)服務(wù)器側(cè)與各客戶端之間分別建立基于網(wǎng)絡(luò)套接字的連接,保持與每個所述客戶端之間所建立的連接;
通過所述連接接收相應(yīng)客戶端所發(fā)送的請求,每個所述請求中攜帶公共網(wǎng)關(guān)接口程序的統(tǒng)一資源定位符、以及請求主體;
基于所述統(tǒng)一資源定位符、以及從所述連接中提取的信息而構(gòu)造的請求頭部,構(gòu)造請求對象;
將所述請求對象以及構(gòu)造的響應(yīng)對象傳遞給所述公共網(wǎng)關(guān)接口程序,從所述響應(yīng)對象中獲取所述公共網(wǎng)關(guān)接口程序的處理結(jié)果;
基于使用所述處理結(jié)果而構(gòu)造的響應(yīng)主體構(gòu)造針對所述請求的響應(yīng),通過所述連接向相應(yīng)的客戶端返回所述響應(yīng)。
第二方面,本發(fā)明實(shí)施例提供一種通信處理裝置,包括:
連接單元,用于在網(wǎng)絡(luò)服務(wù)器側(cè)與各客戶端之間分別建立基于網(wǎng)絡(luò)套接字的連接,保持與每個所述客戶端之間所建立的連接;
接收單元,用于通過所述連接接收相應(yīng)客戶端所發(fā)送的請求,每個所述請求中攜帶公共網(wǎng)關(guān)接口程序的統(tǒng)一資源定位符、以及請求主體;
構(gòu)造單元,用于基于所述統(tǒng)一資源定位符、以及從所述連接中提取的信息而構(gòu)造的請求頭部,構(gòu)造請求對象;
獲取單元,用于將所述請求對象以及構(gòu)造的響應(yīng)對象傳遞給所述公共網(wǎng)關(guān)接口程序,從所述響應(yīng)對象中獲取所述公共網(wǎng)關(guān)接口程序的處理結(jié)果;
響應(yīng)單元,還用于基于使用所述處理結(jié)果而構(gòu)造的響應(yīng)主體構(gòu)造針對所述請求的響應(yīng),通過所述連接向相應(yīng)的客戶端返回所述響應(yīng)。
第三方面,本發(fā)明實(shí)施例提供一種通信處理裝置,包括:處理器和存儲器;存儲器中存儲有可執(zhí)行指令,用于執(zhí)行本發(fā)明實(shí)施例提供的通信處理方法。
第四方面,本發(fā)明實(shí)施例提供一種存儲介質(zhì),存儲有可執(zhí)行指令,用于執(zhí)行本發(fā)明實(shí)施例提供的通信處理方法。
本發(fā)明實(shí)施例具有以下有益效果:
網(wǎng)絡(luò)服務(wù)器與客戶端之間建立保持的連接,對于客戶端來說可以復(fù)用與網(wǎng)絡(luò)服務(wù)器之間的連接向網(wǎng)絡(luò)服務(wù)器發(fā)送請求,避免了重復(fù)建立連接的情況,對于網(wǎng)絡(luò)服務(wù)器與客戶端而言,能夠提升訪問網(wǎng)絡(luò)服務(wù)器的效率;
在網(wǎng)絡(luò)服務(wù)器側(cè)通過構(gòu)造請求對象傳遞給公共網(wǎng)關(guān)接口程序,一方面保證了傳遞必要的信息給公共網(wǎng)關(guān)接口程序形成處理結(jié)果,另一方面,對于客戶端來說,發(fā)送請求時在請求中不需要再攜帶請求頭部,顯著節(jié)約網(wǎng)絡(luò)服務(wù)器與客戶端之間的帶寬;
網(wǎng)絡(luò)服務(wù)器向客戶端發(fā)送的響應(yīng),響應(yīng)主體中攜帶公共網(wǎng)關(guān)接口程序形成的處理結(jié)果,一方面,能夠向客戶端正常返回公共網(wǎng)關(guān)接口程序的處理結(jié)果,另一方面,由于沒有攜帶響應(yīng)頭部,進(jìn)一步顯著節(jié)約網(wǎng)絡(luò)服務(wù)器與客戶端之間的帶寬。
附圖說明
圖1是本發(fā)明實(shí)施例提供的通信處理裝置的一個可選的硬件結(jié)構(gòu)示意圖;
圖2是本發(fā)明實(shí)施例提供網(wǎng)絡(luò)服務(wù)器與客戶端基于短連接通信的一個可選的示意圖;
圖3是本發(fā)明實(shí)施例提供的網(wǎng)絡(luò)服務(wù)器與客戶端基于短連接通信的一個可選的處理流程圖;
圖4是本發(fā)明實(shí)施例提供的網(wǎng)絡(luò)服務(wù)器與客戶端建立連接的一個可選的示意圖;
圖5是本發(fā)明實(shí)施例提供的客戶端與服務(wù)器通過長連接進(jìn)行通信的一個可選的流程示意圖;
圖6是本發(fā)明實(shí)施例提供的客戶端與服務(wù)器通過長連接進(jìn)行通信的一個可選的流程示意圖;
圖7-1是本發(fā)明實(shí)施例提供的應(yīng)用于網(wǎng)上留言功能的客戶端與網(wǎng)絡(luò)服務(wù)器通信的示意圖;
圖7-2是本發(fā)明實(shí)施例提供的應(yīng)用于用戶網(wǎng)絡(luò)狀態(tài)查詢的客戶端與網(wǎng)絡(luò)服務(wù)器通信的示意圖;
圖8是本發(fā)明實(shí)施例提供的通信處理裝置的一個可選的功能結(jié)構(gòu)示意圖。
具體實(shí)施方式
以下結(jié)合附圖及實(shí)施例,對本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
對本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明之前,對本發(fā)明實(shí)施例中涉及的名詞和術(shù)語進(jìn)行說明,本發(fā)明實(shí)施例中涉及的名詞和術(shù)語適用于如下的解釋。
1)網(wǎng)絡(luò)套接字,是支持網(wǎng)絡(luò)套接字的客戶端(如瀏覽器客戶端、彩票競猜客戶端)與網(wǎng)絡(luò)服務(wù)器進(jìn)行向通信連接的端點(diǎn),網(wǎng)絡(luò)套接字至少需要3個參數(shù)來指定:通信的目的地址;端口;網(wǎng)絡(luò)協(xié)議。
例如,就網(wǎng)絡(luò)服務(wù)器和客戶端之間的網(wǎng)絡(luò)套接字來說,是由網(wǎng)絡(luò)服務(wù)器網(wǎng)際協(xié)議(IP,Internet Protocol)地址、網(wǎng)絡(luò)服務(wù)器端口號、客戶端IP地址以及客戶端端口號的組合,其用于標(biāo)識客戶端請求的服務(wù)器和服務(wù);是網(wǎng)絡(luò)通信過程中端點(diǎn)的抽象表示。
2)長連接:指在客戶端與網(wǎng)絡(luò)服務(wù)器之間基于網(wǎng)絡(luò)套接字建立的可以復(fù)用的傳輸數(shù)據(jù)的連接,在連接中沒有數(shù)據(jù)發(fā)送時,客戶端和網(wǎng)絡(luò)服務(wù)器可以持久保持連接(直至一方主動斷開,或者保持時間到達(dá)),以在具有傳輸數(shù)據(jù)的需求時復(fù)用連接傳輸數(shù)據(jù),而不必立即釋放連接。
3)短連接:客戶端與網(wǎng)絡(luò)服務(wù)器在具有通信需求時建立的基于網(wǎng)絡(luò)套接字的連接,當(dāng)客戶端通過連接向網(wǎng)絡(luò)服務(wù)器發(fā)送請求并接收到響應(yīng)后,則雙方釋放此連接,即每次連接只完成一項(xiàng)業(yè)務(wù)的數(shù)據(jù)傳輸。
4)公共網(wǎng)關(guān)接口(CGI,Common Gateway Interface),規(guī)定了網(wǎng)絡(luò)服務(wù)器調(diào)用公共網(wǎng)關(guān)接口程序的接口協(xié)議標(biāo)準(zhǔn),網(wǎng)絡(luò)服務(wù)器通過調(diào)用CGI程序?qū)崿F(xiàn)和客戶端(瀏覽器)的交互。
網(wǎng)絡(luò)服務(wù)器接收客戶端發(fā)送給網(wǎng)絡(luò)服務(wù)器的信息,執(zhí)行公共網(wǎng)關(guān)接口程序進(jìn)行處理,將公共網(wǎng)關(guān)接口程序的處理結(jié)果再回送給客戶端。公共網(wǎng)關(guān)接口程序可以用任何程序設(shè)計(jì)語言編寫,如Shell腳本語言、Perl、Fortran、Pascal和C語言等。
公共網(wǎng)關(guān)接口涉及的接口包括:
5.1)標(biāo)準(zhǔn)輸入(Stdin),公共網(wǎng)關(guān)接口從標(biāo)準(zhǔn)輸入(Stdin)得到客戶端通過Post方法提交網(wǎng)絡(luò)服務(wù)器的數(shù)據(jù),如表單(Form)中的數(shù)據(jù)。
5.2)環(huán)境變量,網(wǎng)絡(luò)服務(wù)器的操作系統(tǒng)提供的變量,如環(huán)境變量QUERY-STRING,當(dāng)客戶端發(fā)送的請求以Get方法向網(wǎng)絡(luò)服務(wù)器提交數(shù)據(jù)時,公共網(wǎng)關(guān)接口程序從環(huán)境變量QUERY-STRING中能夠讀取客戶端提交的數(shù)據(jù)。
5.3)標(biāo)準(zhǔn)輸出(Stdout),公共網(wǎng)關(guān)接口程序通過標(biāo)準(zhǔn)輸出將針對數(shù)據(jù)的處理結(jié)果輸出,處理結(jié)果可以用各種格式,例如可以為純文本或者超文本標(biāo)記語言(HTML,Hyper Text Markup Language)文本的形式。
6)請求對象,即與請求對應(yīng)的類的實(shí)例化,與公共網(wǎng)關(guān)接口程序?qū)?yīng),用于在內(nèi)存空間中存儲供公共網(wǎng)關(guān)接口程序響應(yīng)客戶端的請求所需要使用的環(huán)境變量,包括:客戶端請求運(yùn)行的公共網(wǎng)關(guān)接口程序的地址;客戶端與網(wǎng)絡(luò)服務(wù)器建立的連接的信息,例如:客戶端的IP地址;客戶端數(shù)據(jù)(Cookie)等。
7)響應(yīng)對象,即與響應(yīng)對應(yīng)的類的實(shí)例化,與公共網(wǎng)關(guān)接口程序?qū)?yīng),用于在內(nèi)存空間中供相應(yīng)的公共網(wǎng)關(guān)接口程序輸出處理結(jié)果,如HTML頁面、純文本等。
現(xiàn)在將參考附圖描述實(shí)現(xiàn)本發(fā)明實(shí)施例的通信處理裝置。通信處理裝置可以以各種形式來實(shí)施,能夠應(yīng)用于任意基于服務(wù)器/客戶端的架構(gòu)中的網(wǎng)絡(luò)服務(wù)器或者客戶端,可以理解地,網(wǎng)絡(luò)服務(wù)器與客戶端是一個相對的概念,只在網(wǎng)絡(luò)服務(wù)器與客戶端的連接期間有效,在一個連接中的網(wǎng)絡(luò)服務(wù)器在另一個連接中也可以為客戶端。對于服務(wù)器與客戶端實(shí)現(xiàn)的業(yè)務(wù)而言不做限定,例如可以為網(wǎng)頁留言和數(shù)據(jù)查詢等。
參見圖1,圖1是本發(fā)明實(shí)施例提供的通信處理裝置的一個可選的硬件結(jié)構(gòu)示意圖,通信處理裝置100包括處理器101、通信單元102、存儲器103、輸入單元104和內(nèi)存器105。圖1示出了具有各種組件的通信處理裝置,但是應(yīng)理解的是,并不要求實(shí)施所有示出的組件??梢蕴娲貙?shí)施更多或更少的組件。將在下面詳細(xì)描述網(wǎng)絡(luò)服務(wù)器中的組件。
處理器101用于控制通信處理裝置100的總體操作。例如,處理器101執(zhí)行與實(shí)現(xiàn)與客戶端通信相關(guān)的控制和處理。
通信單元102通常包括一個或多個組件,其允許通信處理裝置100與無線通信系統(tǒng)或網(wǎng)絡(luò)之間的有線方式或無線方式的通信。
例如,有線通信可以是有線電信的通信,即利用電纜、光纖等有形媒質(zhì)傳送信息的方式,信息可以使用光或電信號可以代表聲音、文字和圖像等。
例如,無線通信單元可以實(shí)施為移動通信模塊、無線互聯(lián)網(wǎng)模塊和短程通信模塊中的至少一個。
移動通信模塊將無線電信號發(fā)送到基站(例如,接入點(diǎn)、節(jié)點(diǎn)B等等)、外部終端以及網(wǎng)絡(luò)服務(wù)器中的至少一個和/或從其接收無線電信號。這樣的無線電信號可以包括語音通話信號、視頻通話信號、或者根據(jù)文本和/或多媒體消息發(fā)送和/或接收的各種類型的數(shù)據(jù)。
無線互聯(lián)網(wǎng)模塊支持移動終端的無線互聯(lián)網(wǎng)接入。該模塊可以內(nèi)部或外部地耦接到終端。該模塊所涉及的無線互聯(lián)網(wǎng)接入技術(shù)可以包括無線局域網(wǎng)(WLAN)、無線相容性認(rèn)證(Wi-Fi)、無線寬帶(Wibro)、全球微波互聯(lián)接入(Wimax)、高速下行鏈路分組接入(HSDPA)等等。
短程通信模塊是用于支持短程通信的模塊。短程通信技術(shù)的一些示例包括藍(lán)牙、射頻識別(RFID,Radio Frequency Identification)、紅外數(shù)據(jù)協(xié)會(IrDA,Infrared Data Association)、超寬帶(UWB,Ultra WIDeband)、紫蜂等等。
存儲器103可以存儲由處理器101執(zhí)行的處理和控制操作的軟件程序等等,或者可以暫時地存儲已經(jīng)輸出或?qū)⒁敵龅臄?shù)據(jù)。
存儲器103可以包括至少一種類型的存儲介質(zhì),所述存儲介質(zhì)包括閃存、硬盤、多媒體卡、卡型存儲器(例如,SD或DX存儲器等等)、只讀存儲器(ROM,Read Only Memory)、電可擦除可編程只讀存儲器(EEPROM,Electrically Erasable Programmable Read Only Memory)、可編程只讀存儲器(PROM,Programmable Read Only Memory)、磁性存儲器、磁盤、光盤等等。而且,通信處理裝置100可以與通過網(wǎng)絡(luò)連接執(zhí)行存儲器103的存儲功能的網(wǎng)絡(luò)存儲裝置協(xié)作。
輸入單元104可以根據(jù)用戶輸入的命令生成鍵輸入數(shù)據(jù)以控制網(wǎng)絡(luò)服務(wù)器的各種操作。輸入單元104允許用戶輸入各種類型的信息,并且可以包括鍵盤、觸摸板、滾輪、搖桿等等。特別地,當(dāng)觸摸板以層的形式疊加在顯示單元上時,可以形成觸摸屏。
內(nèi)存器105,供處理器101運(yùn)行各種應(yīng)用程序的易失性存儲介質(zhì),例如可以為隨機(jī)訪問存儲器(RAM,Random Access Memory)、靜態(tài)隨機(jī)訪問存儲器(SRAM,Static Random Access Memory)、其作用是用于暫時存放處理器101的運(yùn)算數(shù)據(jù),以及與硬盤等外部的存儲器交換的數(shù)據(jù)。處理器101會把需要運(yùn)算的數(shù)據(jù)調(diào)到內(nèi)存器105中進(jìn)行運(yùn)算。
這里描述的各種實(shí)施方式可以以使用例如計(jì)算機(jī)軟件、硬件或其任何組合的計(jì)算機(jī)可讀介質(zhì)來實(shí)施。
對于硬件實(shí)施,這里描述的實(shí)施方式可以通過使用特定用途集成電路(ASIC,Application Specific Integrated Circuit)、數(shù)字信號處理器(DSP,Digital Signal Processing)、數(shù)字信號處理裝置(DSPD,Digital Signal Processing Device)、可編程邏輯裝置(PLD,Programmable Logic Device)、現(xiàn)場可編程門陣列(FPGA,F(xiàn)ield Programmable Gate Array)、處理器、控制器、微控制器、微處理器、被設(shè)計(jì)為執(zhí)行這里描述的功能的電子單元中的至少一種來實(shí)施,在一些情況下,這樣的實(shí)施方式可以在處理器101中實(shí)施。
對于軟件實(shí)施,諸如過程或功能的實(shí)施方式可以與允許執(zhí)行至少一種功能或操作的單獨(dú)的軟件模塊來實(shí)施。軟件代碼可以由以任何適當(dāng)?shù)木幊陶Z言編寫的軟件應(yīng)用程序(或程序)來實(shí)施,軟件代碼可以存儲在存儲器103中并且由處理器101執(zhí)行。
至此,已經(jīng)按照其功能描述了本發(fā)明實(shí)施例中涉及的網(wǎng)絡(luò)服務(wù)器,基于上述網(wǎng)絡(luò)服務(wù)器的硬件結(jié)構(gòu)示意圖,對本發(fā)明實(shí)施例提供的應(yīng)用于網(wǎng)絡(luò)服務(wù)器的通信處理方法進(jìn)行說明。
首先對本發(fā)明實(shí)施例提供的客戶端通過短連接向網(wǎng)絡(luò)服務(wù)器發(fā)送請求而獲得處理結(jié)果一個可選的過程進(jìn)行說明,參見圖2,圖2是本發(fā)明實(shí)施例提供網(wǎng)絡(luò)服務(wù)器與客戶端連接通信的一個可選的示意圖。
網(wǎng)絡(luò)服務(wù)器中可以運(yùn)行有多個公共網(wǎng)關(guān)接口程序,每個公共網(wǎng)關(guān)接口程序用于實(shí)現(xiàn)特定的業(yè)務(wù)邏輯而形成處理結(jié)果。網(wǎng)絡(luò)服務(wù)器運(yùn)行的公共網(wǎng)關(guān)接口程序包括業(yè)務(wù)邏輯,被用來處理來自客戶端的請求,在網(wǎng)絡(luò)服務(wù)器側(cè)產(chǎn)生相應(yīng)的處理結(jié)果;另外,還可以將相應(yīng)的處理結(jié)果反饋給客戶端。
例如,本發(fā)明實(shí)施例提供的公共網(wǎng)關(guān)接口程序的用途可以包括:
1)根據(jù)瀏覽者填寫的HTML表單發(fā)送定制的答復(fù);
2)創(chuàng)建可單擊的圖像縮略圖;
3)創(chuàng)建一個瀏覽者可以搜索內(nèi)容的數(shù)據(jù)庫;
4)提供服務(wù)器與數(shù)據(jù)庫的接口,并把結(jié)果轉(zhuǎn)換成HTML文檔。
4)制作動態(tài)HTML文檔。
客戶端需要向網(wǎng)絡(luò)服務(wù)器發(fā)送請求以運(yùn)行公共網(wǎng)關(guān)接口程序得到處理結(jié)果,并得到網(wǎng)絡(luò)服務(wù)器的返回的攜帶處理結(jié)果的響應(yīng)時,參見圖3,圖3是本發(fā)明實(shí)施例提供的網(wǎng)絡(luò)服務(wù)器與客戶端基于短連接通信的一個可選的處理流程圖,需要指出地,下文中針對圖2和圖3的說明中涉及的連接均為短連接,包括如下步驟:
步驟101,客戶端與網(wǎng)絡(luò)服務(wù)器的公共網(wǎng)關(guān)接口程序建立基于套接字的短連接。
參見圖4,圖4是本發(fā)明實(shí)施例提供的網(wǎng)絡(luò)服務(wù)器與客戶端建立連接的一個可選的示意圖,根據(jù)超文本傳輸協(xié)議(HTTP,Hyper Text Transfer Protocol),網(wǎng)絡(luò)服務(wù)器的公共網(wǎng)關(guān)接口程序與客戶端基于三次握手協(xié)議,建立基于網(wǎng)絡(luò)套接字的連接。
建立網(wǎng)絡(luò)套接字連接至少需要一對套接字,其中一個套接字運(yùn)行于客戶端,稱為客戶端套接字,如<客戶端IP地址:客戶端端口;協(xié)議>;另一個套接字運(yùn)行于網(wǎng)絡(luò)服務(wù)器端,稱為服務(wù)器套接字,如<網(wǎng)絡(luò)服務(wù)器IP地址:網(wǎng)絡(luò)服務(wù)器端口;協(xié)議>。
基于套接字的連接過程中,客戶端執(zhí)行連接請求時將觸發(fā)三次握手過程:
步驟1011,網(wǎng)絡(luò)服務(wù)器監(jiān)聽:網(wǎng)絡(luò)服務(wù)器并不定位具體的客戶端套接字,而是處于等待連接的狀態(tài),實(shí)時監(jiān)控網(wǎng)絡(luò)狀態(tài),等待客戶端的連接請求。
步驟1012,客戶端請求:指客戶端的套接字提出連接請求,要連接的目標(biāo)是服務(wù)器端的套接字。為此,客戶端的套接字必須首先描述它要連接的網(wǎng)絡(luò)服務(wù)器的套接字,指出網(wǎng)絡(luò)服務(wù)器套接字的IP地址和端口號,然后就向網(wǎng)絡(luò)服務(wù)器套接字提出連接請求。
步驟1013,網(wǎng)絡(luò)服務(wù)器端連接確認(rèn):當(dāng)網(wǎng)絡(luò)服務(wù)器端接收到客戶端套接字的連接請求時,就響應(yīng)客戶端套接字的請求,建立一個新的線程,把服務(wù)器端套接字的描述發(fā)給客戶端,一旦客戶端確認(rèn)了此描述,雙方就正式建立連接。而服務(wù)器端套接字繼續(xù)處于監(jiān)聽狀態(tài),繼續(xù)接收其他客戶端套接字的連接請求。
步驟102,客戶端通過連接向網(wǎng)絡(luò)服務(wù)器的公共網(wǎng)關(guān)接口程序發(fā)送的HTTP,請求(也簡稱為請求),HTTP請求包括的字段如下表1所示:
表1
1)請求行,包括:
1.1)請求地址(Path),即客戶端需要訪問的公共網(wǎng)關(guān)接口的統(tǒng)一資源定位符(URL,Uniform Resource Locator);
1.2)協(xié)議以及版本號;
1.3)請求方法,如Get方法、Post方法,即客戶端向網(wǎng)絡(luò)服務(wù)器提交數(shù)據(jù)的方法;使用Get方法時,客戶端向網(wǎng)絡(luò)服務(wù)器提交的數(shù)據(jù)(也稱為請求內(nèi)容或請求數(shù)據(jù))位于URL的尾部;使用Post方法時,客戶端提交的數(shù)據(jù)位于請求主體中;
2)請求頭部(Header),也就是請求的頭部,由關(guān)鍵字:值(Value)的構(gòu)成的對所形成,根據(jù)HTTP協(xié)議,請求頭中可以包括有以下幾種類型的信息:
2.1)用戶代理(User-Agent),客戶端的廠家和版本;
2.2)可識別(Accept),客戶端可識別的內(nèi)容類型列表;
2.3)內(nèi)容長度(Content-Length),附加到請求的數(shù)據(jù)字節(jié)數(shù)(長度);
2.4)客戶端數(shù)據(jù)(Cookie),表明客戶端的用戶身份、進(jìn)行會話跟蹤而儲存在客戶端的數(shù)據(jù)。
3)請求主體(body),即請求中的消息體,當(dāng)請求使用Post方法時,請求主體中包括客戶端提交的數(shù)據(jù),用于傳遞給相應(yīng)的公共網(wǎng)關(guān)接口程序形成處理結(jié)果。
對客戶端在請求中提交數(shù)據(jù)的方式進(jìn)行說明。
方式1)根據(jù)HTTP協(xié)議,客戶端可以使用Get方法(在請求方法中指示)提交必要的數(shù)據(jù),即客戶端將數(shù)據(jù)加到URL的末尾,使用“?”連接,例如:
http://127.0.0.1/cgi-bin/hello.exe?data;其中“data”表示客戶端提交的數(shù)據(jù)部分,127.0.0.1/cgi-bin/hello.exe表示客戶端需要執(zhí)行的公共網(wǎng)關(guān)接口程序在網(wǎng)絡(luò)服務(wù)器中的位置。
方式2)根據(jù)HTTP協(xié)議,客戶端還可以使用Post方法(在請求方法中指示)向服務(wù)器提交數(shù)據(jù),客戶端提交的數(shù)據(jù)攜帶在請求主體中。
步驟103,網(wǎng)絡(luò)服務(wù)器的守護(hù)進(jìn)程定位客戶端需要執(zhí)行的公共網(wǎng)關(guān)接口程序,并執(zhí)行相應(yīng)的公共網(wǎng)關(guān)接口程序。
網(wǎng)絡(luò)服務(wù)器的守護(hù)進(jìn)程接收到客戶端的請求后,會啟動公共網(wǎng)關(guān)接口程序以創(chuàng)建一個與公共網(wǎng)關(guān)接口程序相關(guān)的進(jìn)程(CGI進(jìn)程),該CGI進(jìn)程會創(chuàng)建與網(wǎng)絡(luò)服務(wù)器之間的數(shù)據(jù)通道(標(biāo)準(zhǔn)I/O),然后啟動客戶端的請求中攜帶的URL指向的公共網(wǎng)關(guān)接口程序,公共網(wǎng)關(guān)接口程序會設(shè)置自身相關(guān)的環(huán)境變量。
步驟104,公共網(wǎng)關(guān)接口程序提取客戶端通過HTTP請求提交的數(shù)據(jù)。
對客戶端提交數(shù)據(jù)使用不同方法提交數(shù)據(jù)時公共網(wǎng)關(guān)接口程序提取數(shù)據(jù)的方式進(jìn)行說明。
1)客戶端在HTTP請求中指示使用Get方法提交數(shù)據(jù)時,根據(jù)公共網(wǎng)關(guān)接口協(xié)議,客戶端使用Get方法提交的數(shù)據(jù)在網(wǎng)絡(luò)服務(wù)器中被存儲在用于存儲數(shù)據(jù)的特定環(huán)境變量如QUERY_STRING中,公共網(wǎng)關(guān)接口程序能夠從環(huán)境變量QUERY_STRING中讀取數(shù)據(jù)。
2)客戶端在HTTP請求中指示使用Post方法向服務(wù)器提交數(shù)據(jù)時,根據(jù)公共網(wǎng)關(guān)接口協(xié)議,客戶端使用Post方法向網(wǎng)絡(luò)服務(wù)器提交的數(shù)據(jù),在公共網(wǎng)關(guān)接口程序的標(biāo)準(zhǔn)輸入中存儲,提交數(shù)據(jù)的長度在公共網(wǎng)關(guān)接口程序的環(huán)境變量(即,用于存儲長度的環(huán)境變量)CONTENT_LENGTH中存儲,根據(jù)指示數(shù)據(jù)長度的環(huán)境變量Content-Length,公共網(wǎng)關(guān)接口程序從標(biāo)準(zhǔn)輸入能夠讀取得到客戶端提交的相應(yīng)長度的數(shù)據(jù)。
另外,不管客戶端提交數(shù)據(jù)使用的是Post方法還是Get方法,為了便于傳輸,客戶端器發(fā)送給服務(wù)器的數(shù)據(jù)都不是客戶端所提交的原始的數(shù)據(jù),而是經(jīng)過URL編碼形成<變量名稱,變量數(shù)值>這樣的形式進(jìn)行存儲;此時,公共網(wǎng)關(guān)接口程序的環(huán)境變量Content_type將被設(shè)置,如:
Content_type=application/x-www-form-urlencode,用于表示服務(wù)器收到的是經(jīng)過URL編碼的數(shù)據(jù)。
對于URL編碼的方式本發(fā)明實(shí)施例不做限定,例如,變量之間用“&”分開;變量與其對應(yīng)值用“=”連接等;另外,當(dāng)網(wǎng)絡(luò)服務(wù)器提取到客戶端提交的編碼后的數(shù)據(jù)時,根據(jù)URL編碼的規(guī)則進(jìn)行逆序的解碼可以得到原始的數(shù)據(jù)。
步驟105,公共網(wǎng)關(guān)接口程序針對客戶端提交的數(shù)據(jù)進(jìn)行處理,形成處理結(jié)果。
公共網(wǎng)關(guān)接口程序能夠完成客戶端在網(wǎng)頁獲取的用戶提交的數(shù)據(jù)的處理(根據(jù)公共網(wǎng)關(guān)接口程序自身的業(yè)務(wù)邏輯而區(qū)別)、數(shù)據(jù)庫(DB)查詢、以及實(shí)現(xiàn)與其他的應(yīng)用系統(tǒng)的集成等業(yè)務(wù)邏輯,形成處理結(jié)果,本發(fā)明實(shí)施例中對公共網(wǎng)關(guān)接口的具體業(yè)務(wù)邏輯不做限定。
例如,網(wǎng)絡(luò)服務(wù)器可以解析HTTP協(xié)議。當(dāng)網(wǎng)絡(luò)服務(wù)器接收到一個HTTP請求(request),會返回一個HTTP響應(yīng)(response),例如送回一個HTML頁面。為了處理一個請求,網(wǎng)絡(luò)服務(wù)器可以響應(yīng)一個靜態(tài)頁面或圖片,進(jìn)行頁面跳轉(zhuǎn)或者把動態(tài)響應(yīng)(dynamic response)的產(chǎn)生委托給一些其它的程序例如CGI腳本,Java服務(wù)器頁面(JSP,JavaServer Pages)腳本、Java編寫的服務(wù)器端程序(servlets)、動態(tài)頁面(ASP,Active Server Pages)腳本、JavaScript,或者一些其它的服務(wù)器端(server-side)技術(shù)。無論其它的程序的目的如何,網(wǎng)絡(luò)服務(wù)器的程序都是產(chǎn)生一個HTML(或純文本)的響應(yīng)來供客戶端處理(如顯示)。
步驟106,網(wǎng)絡(luò)服務(wù)器通過連接向客戶端返回處理結(jié)果。
CGI進(jìn)程通過標(biāo)準(zhǔn)輸出將針對客戶端提交數(shù)據(jù)的處理結(jié)果輸出給網(wǎng)絡(luò)服務(wù)器的守護(hù)進(jìn)程,守護(hù)進(jìn)程將處理結(jié)果以HTTP響應(yīng)(也簡稱為響應(yīng))的方式返回客戶端,HTTP響應(yīng)包括的字段如表2所示:
表2
狀態(tài)碼(Status Code):描述了響應(yīng)的狀態(tài)??梢杂脕頇z查是否成功完成了請求。請求失敗的情況下,根據(jù)狀態(tài)碼可用來找出失敗的原因。
響應(yīng)頭部(Header):包含了更多關(guān)于響應(yīng)的信息。比如:頭部可以指定認(rèn)為響應(yīng)過期的過期日期,或者是指定用來給用戶安全的傳輸實(shí)體內(nèi)容的編碼格式。
響應(yīng)主體(響應(yīng)中的消息體),包含了公共網(wǎng)關(guān)接口程序針對客戶端提交的數(shù)據(jù)的處理結(jié)果,例如可以包含HTML代碼、圖片、響應(yīng)主體是由傳輸在HTTP響應(yīng)中緊跟在響應(yīng)頭部后面的數(shù)據(jù)字節(jié)組成。
步驟107,客戶端釋放與網(wǎng)絡(luò)服務(wù)器建立的短連接。
根據(jù)HTTP協(xié)議,客戶端與網(wǎng)絡(luò)服務(wù)器之間通過四次握手協(xié)議斷開連接,包括釋放與連接相關(guān)的資源,如連接所占用的內(nèi)存、端口等。
在上述的客戶端與服務(wù)器通過短連接通信的過程中,網(wǎng)絡(luò)服務(wù)器為了支持大量客戶端的業(yè)務(wù),需要與客戶端之間頻繁建立短連接并在業(yè)務(wù)結(jié)束時釋放無用的短連接,客戶端需要頻繁建立連接而導(dǎo)致處理效率低,造成了對網(wǎng)絡(luò)服務(wù)器資源的大量占用;另外,客戶端頻繁向服務(wù)器發(fā)送請求,請求和響應(yīng)中都會攜帶頭部(如Cookie),頭部的傳輸造成了客戶端與網(wǎng)絡(luò)服務(wù)器之間的帶寬的大量占用。
針對上述問題,本發(fā)明實(shí)施例提供一種網(wǎng)絡(luò)服務(wù)器與客戶端之間通過網(wǎng)絡(luò)套接字協(xié)議建立的長連接進(jìn)行通信的方案,應(yīng)用于基于網(wǎng)絡(luò)服務(wù)器/客戶端架構(gòu)中的網(wǎng)絡(luò)服務(wù)器,可以理解地,網(wǎng)絡(luò)服務(wù)器與客戶端是一個相對的概念,只在網(wǎng)絡(luò)服務(wù)器與客戶端的連接期間有效,在一個連接中的網(wǎng)絡(luò)服務(wù)器在另一個連接中也可以為客戶端。
參見圖5,圖5是本發(fā)明實(shí)施例提供的客戶端與服務(wù)器通過網(wǎng)絡(luò)套接字建立長連接進(jìn)行通信的一個可選的流程示意圖,如無特別說明,針對圖5以及后續(xù)圖6的說明中所涉及的連接均為基于網(wǎng)絡(luò)套接字協(xié)議建立的長連接,在圖5中涉及以下步驟:
步驟201,網(wǎng)絡(luò)服務(wù)器與各客戶端之間分別建立連接,保持與每個客戶端之間所建立的連接;相當(dāng)于客戶端與服務(wù)器之間建立了長連接,對于每個連接來說,可供客戶端復(fù)用于向所連接的網(wǎng)絡(luò)服務(wù)器發(fā)送請求。
步驟202,網(wǎng)絡(luò)服務(wù)器通過連接接收相應(yīng)客戶端所發(fā)送的請求,每個請求中攜帶公共網(wǎng)關(guān)接口程序的統(tǒng)一資源定位符、以及請求主體。
步驟203,網(wǎng)絡(luò)服務(wù)器基于統(tǒng)一資源定位符、以及從連接中提取的信息而構(gòu)造的請求頭部,構(gòu)造請求對象。
步驟204,網(wǎng)絡(luò)服務(wù)器將請求對象以及構(gòu)造的響應(yīng)對象傳遞給公共網(wǎng)關(guān)接口程序,從響應(yīng)對象中獲取公共網(wǎng)關(guān)接口程序的處理結(jié)果。
由網(wǎng)絡(luò)服務(wù)器來構(gòu)造包括請求頭部的請求對象,并傳遞給公共網(wǎng)關(guān)接口程序,這樣客戶端不必在每次發(fā)送請求時在請求中攜帶頭部,從而節(jié)約網(wǎng)絡(luò)服務(wù)器與客戶端之間的通信帶寬。
步驟205,網(wǎng)絡(luò)服務(wù)器使用處理結(jié)果構(gòu)造響應(yīng)主體,并基于響應(yīng)主體構(gòu)造針對請求的響應(yīng)。
步驟206,通過連接向相應(yīng)的客戶端發(fā)送響應(yīng);對于響應(yīng)而言,僅包括響應(yīng)主體,另外,還可以包括狀態(tài)碼,但未攜帶響應(yīng)頭部,由于不需要傳輸數(shù)據(jù)量較大的Cookie等頭部元素,能夠節(jié)約網(wǎng)絡(luò)服務(wù)器與客戶端之間的通信帶寬。
后續(xù),當(dāng)客戶端再次發(fā)送請求時,重復(fù)執(zhí)行上述步驟201至步驟205,那么,對于客戶端來說,不必在每次需要發(fā)送請求時與網(wǎng)絡(luò)服務(wù)器連接,對于服務(wù)器而言不需要對客戶端建立連接的請求進(jìn)行頻繁響應(yīng),同時客戶端向網(wǎng)絡(luò)服務(wù)器發(fā)送的請求、以及網(wǎng)絡(luò)服務(wù)器的響應(yīng)因沒有攜帶頭部,從而能夠節(jié)省客戶端與網(wǎng)絡(luò)服務(wù)器之間的通信帶寬。
下面,再以一個客戶端通過連接向網(wǎng)絡(luò)服務(wù)器發(fā)送請求,并獲得網(wǎng)絡(luò)服務(wù)器針對請求的響應(yīng)的過程進(jìn)行說明,需要指出地,對于該客戶端后續(xù)復(fù)用該連接向網(wǎng)絡(luò)服務(wù)器發(fā)送請求并獲得響應(yīng)的過程,可以基于下述針對圖6的說明而實(shí)施,對于其他客戶端與網(wǎng)絡(luò)服務(wù)器建立連接,并復(fù)用連接向網(wǎng)絡(luò)服務(wù)發(fā)送請求并獲得響應(yīng)的過程,與下述結(jié)合圖6的說明是類似的,可以基于下述的說明而實(shí)施。
參見圖6,圖6是本發(fā)明實(shí)施例提供的客戶端與服務(wù)器通過長連接進(jìn)行通信的一個可選的流程示意圖,涉及以下步驟:
步驟301,網(wǎng)絡(luò)服務(wù)器與各客戶端之間分別建立基于網(wǎng)絡(luò)套接字的連接,保持與每個客戶端之間所建立的連接,即創(chuàng)建長連接;對于每個連接來說,可供客戶端復(fù)用于向所連接的網(wǎng)絡(luò)服務(wù)器發(fā)送請求。
參見圖4,圖4是本發(fā)明實(shí)施例提供的網(wǎng)絡(luò)服務(wù)器與客戶端建立基于網(wǎng)絡(luò)套接字的連接的一個可選的示意圖,根據(jù)HTTP協(xié)議,網(wǎng)絡(luò)服務(wù)器的長連接程序與客戶端基于三次握手協(xié)議,建立基于網(wǎng)絡(luò)套接字的連接。
建立網(wǎng)絡(luò)套接字連接至少需要一對套接字,其中一個套接字運(yùn)行于客戶端,稱為客戶端套接字,如<客戶端IP地址:客戶端端口;協(xié)議>;另一個套接字運(yùn)行于網(wǎng)絡(luò)服務(wù)器端,稱為服務(wù)器套接字,如<網(wǎng)絡(luò)服務(wù)器IP地址:網(wǎng)絡(luò)服務(wù)器端口;協(xié)議>。
基于套接字的連接過程中,客戶端執(zhí)行連接請求時將觸發(fā)三次握手過程:
步驟3011,網(wǎng)絡(luò)服務(wù)器監(jiān)聽:網(wǎng)絡(luò)服務(wù)器并不定位具體的客戶端套接字,而是處于等待連接的狀態(tài),實(shí)時監(jiān)控網(wǎng)絡(luò)狀態(tài),等待客戶端的連接請求。
步驟3012,客戶端請求:指客戶端的套接字提出連接請求,要連接的目標(biāo)是服務(wù)器端的套接字。為此,客戶端的套接字必須首先描述它要連接的網(wǎng)絡(luò)服務(wù)器的套接字,指出網(wǎng)絡(luò)服務(wù)器套接字的IP地址和端口號,然后就向網(wǎng)絡(luò)服務(wù)器套接字提出連接請求。
另外,在連接建立之后,客戶端還需要與網(wǎng)絡(luò)服務(wù)器保持所建立的連接,對于保持連接而言,客戶端在建立連接時向網(wǎng)絡(luò)服務(wù)器發(fā)送的連接請求的頭部中使用如下的用于保持連接時長的代碼:
Connection:keep-alive;
則客戶端與網(wǎng)絡(luò)服務(wù)器之間的連接將保持打開狀態(tài),于是,客戶端可以復(fù)用該連接多次向網(wǎng)絡(luò)服務(wù)器發(fā)送請求。保持連接節(jié)省了為每個請求建立新連接所需的時間,還節(jié)約了帶寬。其中,keep-alive用于限制連接的保持時間,在keep-alive計(jì)時到達(dá)后,連接可以被釋放。
如果網(wǎng)絡(luò)服務(wù)器的長連接程序檢測到這里的值為“keep-alive”,或者檢測到客戶端建立連接使用的請求中指定使用的是HTTP 1.1(HTTP 1.1默認(rèn)進(jìn)行持久連接)協(xié)議,則網(wǎng)絡(luò)服務(wù)器將與客戶端建立持久連接。
步驟3013,網(wǎng)絡(luò)服務(wù)器端連接確認(rèn):當(dāng)網(wǎng)絡(luò)服務(wù)器端接收到客戶端套接字的連接請求時,就響應(yīng)客戶端套接字的請求,建立一個新的線程,把服務(wù)器端套接字的描述發(fā)給客戶端,一旦客戶端確認(rèn)了此描述,雙方就正式建立連接。當(dāng)套接字長連接成功后,客戶端發(fā)送一個握手的消息給到網(wǎng)絡(luò)服務(wù)器表示連接建立成功。而服務(wù)器端基于套接字繼續(xù)處于監(jiān)聽狀態(tài),繼續(xù)接收其他客戶端套接字的連接請求。
對上述過程所發(fā)送連接請求和響應(yīng)包括的字段進(jìn)行示例性說明。
參見下述示出的客戶端向網(wǎng)絡(luò)服務(wù)器發(fā)送連接請求時,請求的頭部(請求頭部)所包括字段的一個示例:
Connection:Upgrade,本次連接使用的協(xié)議類型;
Sec-WebSocket-Extensions,客戶端想表達(dá)的本字段協(xié)議字段的擴(kuò)展;
Sec-Websocket-Key:webSocket,協(xié)議必須用的頭域,base64編碼的隨機(jī)16字節(jié)長的字符序列;
Sec-Websocket-Key:客戶端的一個私鑰。
Upgrade:本次連接協(xié)議是網(wǎng)絡(luò)套接字協(xié)議。
參見下述示出的網(wǎng)絡(luò)服務(wù)器與客戶端建立連接成功后發(fā)送的響應(yīng)(Response)所包括字段的一個示例,包括:
狀態(tài)碼(Status Code),值為101,這個狀態(tài)碼表示切換協(xié)議,從而完成對協(xié)議的升級更新。
Sec-WebSocket-Accept,網(wǎng)絡(luò)服務(wù)器根據(jù)客戶端發(fā)送的sec-websocket-key私鑰,如果確定是要使用網(wǎng)絡(luò)套接字,就開始進(jìn)行握手,生成一個服務(wù)器端的公鑰發(fā)送給客戶端。
步驟302,網(wǎng)絡(luò)服務(wù)器通過連接接收相應(yīng)客戶端所發(fā)送的請求,每個請求中攜帶公共網(wǎng)關(guān)接口程序的統(tǒng)一資源定位符、以及請求主體。
客戶端發(fā)送的HTTP請求(簡稱為請求)包括字段如下表3所示:
表3
如表3所示,客戶端發(fā)送的請求包括以下字段:
1)請求行,包括:
1.1)請求地址(Path),即客戶端需要訪問的公共網(wǎng)關(guān)接口的URL;
1.2)協(xié)議以及版本號;
1.3)請求方法,如Get方法、Post方法,即客戶端向網(wǎng)絡(luò)服務(wù)器提交數(shù)據(jù)的方法;當(dāng)使用Get方法時客戶端提交的數(shù)據(jù)附加在URL的尾部,當(dāng)使用Post方法時數(shù)據(jù)攜帶在請求主體中。
2)請求主體(body),即請求中的消息體,當(dāng)HTTP請求使用Post方法時,請求主體中包括必要的數(shù)據(jù)(也稱為請求內(nèi)容或請求數(shù)據(jù)),用于傳遞給相應(yīng)的公共網(wǎng)關(guān)接口程序形成處理結(jié)果;當(dāng)HTTP請求使用Get方法時,請求主體的內(nèi)容為空,客戶端提交的數(shù)據(jù)位于URL的尾部;當(dāng)HTTP請求使用Post方法時,請求主體中包括有客戶端提交的數(shù)據(jù)。
與前述表1中客戶端通過短連接的發(fā)送的請求所包括的字段相比,客戶端向網(wǎng)絡(luò)服務(wù)器發(fā)送的請求中未攜帶有請求頭部,由于傳輸Cookie等頭部信息會消耗客戶端與網(wǎng)絡(luò)服務(wù)器之間的大量帶寬,因此客戶端發(fā)送的請求中未攜帶請求頭部時能夠顯著節(jié)約客戶端與服務(wù)器之間的帶寬。
步驟303,網(wǎng)絡(luò)服務(wù)器基于統(tǒng)一資源定位符、以及從連接中提取的信息而構(gòu)造的請求頭部,構(gòu)造請求對象。
由于客戶端的請求中沒有攜帶請求頭部,而公共網(wǎng)關(guān)接口程序在初始化以及處理過程中都需要使用頭部,本發(fā)明實(shí)施例通過由網(wǎng)絡(luò)服務(wù)器端在構(gòu)造的請求對象中存儲請求頭部以及統(tǒng)一資源定位符,通過將請求對象作為入?yún)鬟f給網(wǎng)絡(luò)服務(wù)器,使得公共網(wǎng)關(guān)接口程序在啟動時能夠基于請求對象中的請求頭部的元素,來初始化與公共網(wǎng)關(guān)接口程序相關(guān)的環(huán)境變量。
舉例來說,在網(wǎng)絡(luò)服務(wù)器的長連接程序與客戶端建立連接后,長連接程序能夠提取建立連接的相關(guān)信息(例如客戶端發(fā)送的連接請求、以及長連接程序發(fā)送的響應(yīng))作為用于構(gòu)造請求頭部的元素,包括:
1)客戶端的IP地址;
2)用戶代理(User-Agent),客戶端的廠家和版本;
3)可識別(Accept),客戶端可識別的內(nèi)容類型列表;
4)內(nèi)容長度(Content-Length),附加到請求的數(shù)據(jù)字節(jié)數(shù)(長度);
5)客戶端數(shù)據(jù)(Cookie),表明客戶端的用戶身份、進(jìn)行會話跟蹤而儲存在客戶端的數(shù)據(jù)。
網(wǎng)絡(luò)服務(wù)器的長連接程序?qū)⑸鲜鲈貥?gòu)造的請求頭部以及客戶端需要訪問的公共網(wǎng)關(guān)接口的URL,在網(wǎng)絡(luò)服務(wù)器的內(nèi)存空間中存儲,從而構(gòu)造形成請求對象,請求對象在網(wǎng)絡(luò)服務(wù)器的內(nèi)存空間中分配有相應(yīng)的指針。
步驟304,網(wǎng)絡(luò)服務(wù)器構(gòu)造響應(yīng)對象。
網(wǎng)絡(luò)服務(wù)器的長連接程序在內(nèi)存空間創(chuàng)建用于供公共網(wǎng)關(guān)接口程序輸出處理結(jié)果的內(nèi)存空間,即響應(yīng)對象,響應(yīng)對象分配有對應(yīng)的指針。
步驟305,網(wǎng)絡(luò)服務(wù)器訪問公共網(wǎng)關(guān)接口程序,將請求對象以及構(gòu)造的響應(yīng)對象傳遞給公共網(wǎng)關(guān)接口程序。
網(wǎng)絡(luò)服務(wù)器的長連接程序?qū)⒄埱髮ο蟮闹羔槪约皹?gòu)造的響應(yīng)對象的指針作為入?yún)?,傳遞給啟動的公共網(wǎng)關(guān)接口程序,根據(jù)客戶端發(fā)送的請求攜帶的URL,網(wǎng)絡(luò)服務(wù)器的長連接程序在網(wǎng)絡(luò)服務(wù)器中定位URL指向的公共網(wǎng)關(guān)接口程序,啟動公共網(wǎng)關(guān)接口程序,由公共網(wǎng)關(guān)接口程序從請求對象中讀取請求頭部的元素來初始化與自身相關(guān)的變量,基于客戶端提交的數(shù)據(jù)進(jìn)行處理并輸出到響應(yīng)對象,響應(yīng)對象可以通過回調(diào)(call back)的方式通知長連接程序,從而由長連接程序從響應(yīng)對象中讀取公共網(wǎng)關(guān)程序的處理結(jié)果。
由于客戶端發(fā)送的請求中沒有攜帶請求頭部,而公共網(wǎng)關(guān)接口程序在啟動時需要初始化與請求頭部的元素的環(huán)境變量的初始化,因此,通過構(gòu)造請求對象并將相應(yīng)的指針傳遞給公共網(wǎng)關(guān)接口程序,能夠保證公共網(wǎng)關(guān)接口程序獲取到請求頭部的元素來完成自身相關(guān)的環(huán)境變量的初始化,保證公共網(wǎng)關(guān)接口程序能夠基于客戶端提交的數(shù)據(jù)進(jìn)行處理以輸出處理結(jié)果。
例如,當(dāng)公共網(wǎng)關(guān)接口程序啟動時,根據(jù)前述步驟303記載的請求頭部的元素,進(jìn)行與請求頭部的元素相應(yīng)的環(huán)境變量的初始化:
1)根據(jù)客戶端的IP地址來初始化環(huán)境變量REMOTE_ADDR,REMOTE_ADDR表示發(fā)送請求的主機(jī)IP;
2)根據(jù)內(nèi)容長度(Content-Length)來初始化環(huán)境變量CONTENT_LENGTH,CONTENT_LENGTH用于表示提交數(shù)據(jù)的長度;
3)根據(jù)客戶端數(shù)據(jù)(Cookie)來初始化環(huán)境變量HTTP_COOKIE,HTTP_COOKIE表示Cookie中的鍵值對。
通過構(gòu)造與公共網(wǎng)關(guān)接口程序?qū)?yīng)的響應(yīng)對象,以實(shí)現(xiàn)保證長連接程序獲取到公共網(wǎng)關(guān)接口程序輸出的處理結(jié)果,需要指出地,上面僅僅示例性對請求頭部元素與對應(yīng)環(huán)境變量的初始化進(jìn)行了說明,對于未示出的請求頭部的元素以及對應(yīng)環(huán)境變量的初始化,可以根據(jù)上述的處理而實(shí)施。
步驟306,公共網(wǎng)關(guān)接口程序讀取客戶端提交的數(shù)據(jù)進(jìn)行處理形成處理結(jié)果。
根據(jù)客戶端的請求所使用的不同方法,包括以下兩種情況:
1)客戶端在HTTP請求中指示使用Get方法提交數(shù)據(jù)時,根據(jù)公共網(wǎng)關(guān)接口協(xié)議,客戶端使用Get方法提交的數(shù)據(jù)在網(wǎng)絡(luò)服務(wù)器中被存儲在環(huán)境變量QUERY_STRING中,公共網(wǎng)關(guān)接口程序能夠從環(huán)境變量QUERY_STRING中讀取數(shù)據(jù)。
2)客戶端在HTTP請求中指示使用Post方法,向服務(wù)器提交數(shù)據(jù)時,長連接程序從URL的尾部提取客戶端提交數(shù)據(jù),存儲在公共網(wǎng)關(guān)接口程序的標(biāo)準(zhǔn)輸入中,并將數(shù)據(jù)的長度存儲在環(huán)境變量CONTENT_LENGTH中,公共網(wǎng)關(guān)接口程序據(jù)指示數(shù)據(jù)長度的環(huán)境變量Content-Length,從標(biāo)準(zhǔn)輸入能夠讀取得到客戶端提交的相應(yīng)長度的數(shù)據(jù)。
公共網(wǎng)關(guān)接口程序能夠完成客戶端在網(wǎng)頁獲取的用戶提交的數(shù)據(jù)的處理(根據(jù)公共網(wǎng)關(guān)接口程序自身的業(yè)務(wù)邏輯而區(qū)別)、數(shù)據(jù)庫查詢、以及實(shí)現(xiàn)與各種應(yīng)用系統(tǒng)的集成等業(yè)務(wù)邏輯,形成處理結(jié)果,本發(fā)明實(shí)施例中對公共網(wǎng)關(guān)接口的具體業(yè)務(wù)邏輯不做限定。
步驟307,網(wǎng)絡(luò)服務(wù)器基于處理結(jié)果構(gòu)造響應(yīng)主體,并基于狀態(tài)碼和響應(yīng)主體構(gòu)造響應(yīng),將響應(yīng)通過連接傳輸至客戶端。
長連接程序向客戶端返回的HTTP響應(yīng)包括的字段如下表4所示:
表4
響應(yīng)包括如下字段:
狀態(tài)碼(Status Code):描述了響應(yīng)的狀態(tài)。可以用來檢查是否成功的完成了請求。請求失敗的情況下,狀態(tài)碼可用來找出失敗的原因。
響應(yīng)主體(響應(yīng)中的消息體),包含了公共網(wǎng)關(guān)接口程序針對客戶端提交的數(shù)據(jù)的處理結(jié)果,例如可以包含HTML代碼、圖片、響應(yīng)主體是由傳輸在HTTP響應(yīng)中緊跟在響應(yīng)頭部后面的數(shù)據(jù)字節(jié)組成。
與前表2中網(wǎng)絡(luò)服務(wù)器通過短連接向客戶端返回的響應(yīng)相比,長連接程序待向客戶端返回的相應(yīng)中未攜帶有響應(yīng)頭部,由于響應(yīng)頭部包括了Cookie等容量較大的信息,因此能夠顯著節(jié)約網(wǎng)絡(luò)服務(wù)器與客戶端之間的帶寬。
至此,已經(jīng)對客戶端通過長連接向網(wǎng)絡(luò)服務(wù)器發(fā)送請求并獲得響應(yīng)的過程進(jìn)行了說明;當(dāng)客戶端需要再次向網(wǎng)絡(luò)服務(wù)器發(fā)送請求時,可以復(fù)用之前所建立的連接向客戶端發(fā)送,如前,所發(fā)送的請求中攜帶有需要訪問的公共網(wǎng)關(guān)接口程序的URL、以及請求體,而未攜帶有請求頭部,由網(wǎng)絡(luò)服務(wù)器通過構(gòu)造請求對象和響應(yīng)對象的方式,保證客戶端請求運(yùn)行的公共網(wǎng)關(guān)接口程序能夠運(yùn)行并輸出處理結(jié)果;在向客戶端返回的響應(yīng)中沒有攜帶頭部,以實(shí)現(xiàn)節(jié)約通信帶寬的效果。
再結(jié)合兩個常見的應(yīng)用場景示例性說明。
一、網(wǎng)上留言
參見圖7-1,圖7-1是本發(fā)明實(shí)施例提供的應(yīng)用于網(wǎng)上留言功能的客戶端與網(wǎng)絡(luò)服務(wù)器通信的示意圖。
用戶登錄各種網(wǎng)站時經(jīng)常需要針對一些業(yè)務(wù)進(jìn)行留言,如在購物網(wǎng)站進(jìn)行售前、售后的各種咨詢等。用戶通過瀏覽器登錄到留言網(wǎng)頁時,瀏覽器提示用戶在表單控件輸入留言并通過提交按鈕提交。
獲取到用戶提交留言后,瀏覽器與網(wǎng)絡(luò)服務(wù)器建立長連接,向網(wǎng)絡(luò)服務(wù)器提交請求,在請求中攜帶用于處理流言的CGI程序(一般,網(wǎng)絡(luò)服務(wù)器中包括有處理多種業(yè)務(wù)的CGI程序)的URL和請求主體;如前所述,請求可以使用Get方法或Post方法,如使用Get方法則留言作為URL的尾部向網(wǎng)絡(luò)服務(wù)器提交(此時請求主體為空),如果使用Post方法,則留言在請求主體中向網(wǎng)絡(luò)服務(wù)器提交。
網(wǎng)絡(luò)服務(wù)器的長連接程序根據(jù)URL啟動相應(yīng)的CGI程序,由CGI程序訪問數(shù)據(jù)庫將用戶的留言寫入數(shù)據(jù)庫,并將留言提交的結(jié)果返回網(wǎng)絡(luò)瀏覽器。
在上述過程中,長連接程序根據(jù)建立長連接時客戶端所發(fā)送的連接請求、以及網(wǎng)絡(luò)服務(wù)器所發(fā)送連接響應(yīng)提取必要的信息以構(gòu)造請求頭部,結(jié)合請求頭部和客戶端發(fā)送的請求中攜帶的URL構(gòu)造請求對象,并構(gòu)造響應(yīng)對象供CGI程序輸出向后臺數(shù)據(jù)庫提交留言的結(jié)果;CGI程序根據(jù)請求所使用的方法讀取用戶提交的留言,提交到數(shù)據(jù)庫存儲,根據(jù)數(shù)據(jù)庫的反饋形成提交結(jié)果(留言成功/留言失敗),輸出到響應(yīng)對象中供長連接程序讀取。
長連接程序根據(jù)留言提交的結(jié)果構(gòu)造響應(yīng)主體,使用響應(yīng)主體構(gòu)造響應(yīng)返回瀏覽器,用戶此時可以看到留言提交的結(jié)果。
由于瀏覽器和網(wǎng)絡(luò)服務(wù)器之間采用長連接,因此當(dāng)用戶多次留言時瀏覽器不需要與網(wǎng)絡(luò)服務(wù)器重新建立連接,使得瀏覽器與服務(wù)器之間的連接的速度顯著提高,并且,根據(jù)瀏覽器發(fā)送的請求以及網(wǎng)絡(luò)服務(wù)器返回的響應(yīng)中均未攜帶頭部,節(jié)約了瀏覽器與網(wǎng)絡(luò)服務(wù)器之間的通信帶寬。
可以理解地,上述示例能夠應(yīng)用于各種數(shù)據(jù)提交的業(yè)務(wù),如用戶注冊使用互聯(lián)網(wǎng)服務(wù)(網(wǎng)盤、在線視頻)賬號時個人信息的提交,以及各種數(shù)據(jù)的查詢等。
二、用戶網(wǎng)絡(luò)狀態(tài)查詢
參見圖7-2,圖7-2是本發(fā)明實(shí)施例提供的應(yīng)用于用戶網(wǎng)絡(luò)狀態(tài)查詢的客戶端與網(wǎng)絡(luò)服務(wù)器通信的示意圖。
終端中運(yùn)行的某些客戶端根據(jù)實(shí)際業(yè)務(wù)需求定期查詢用戶在網(wǎng)絡(luò)服務(wù)器側(cè)的網(wǎng)絡(luò)狀態(tài)(例如,是否在線),如在用于彩票競猜的客戶端中,客戶端的業(yè)務(wù)邏輯需要定期查詢用戶的網(wǎng)絡(luò)側(cè)的數(shù)據(jù)庫中是否處于在線狀態(tài),用戶在使用這一類的客戶端時,客戶端自動向網(wǎng)絡(luò)服務(wù)器查詢用戶在網(wǎng)絡(luò)服務(wù)器側(cè)是否處于在線狀態(tài)。
客戶端與網(wǎng)絡(luò)服務(wù)器與建立長連接,接收客戶端提交的請求,攜帶用于查詢用戶狀態(tài)的CGI程序的URL,以及請求主體(例如攜帶用戶的標(biāo)識)。
客戶端發(fā)送的請求可以使用Get方法或Post方法,網(wǎng)絡(luò)服務(wù)器的長連接程序根據(jù)URL啟動相應(yīng)的CGI程序,由CGI程序訪問數(shù)據(jù)庫查詢用戶的狀態(tài)寫入,并將查詢到的結(jié)果返回客戶端。
在上述過程中,長連接程序根據(jù)建立長連接時客戶端所發(fā)送的連接請求、以及網(wǎng)絡(luò)服務(wù)器所發(fā)送連接響應(yīng)提取必要的信息以構(gòu)造請求頭部,結(jié)合請求頭部和客戶端發(fā)送的請求中攜帶的URL構(gòu)造請求對象,并構(gòu)造響應(yīng)對象供CGI程序輸出用戶的網(wǎng)絡(luò)狀態(tài)的查詢結(jié)果。
CGI程序根據(jù)請求所使用的方法提取客戶端需要查詢的用戶的標(biāo)識,提交到后臺數(shù)據(jù)庫查詢用戶的網(wǎng)絡(luò)狀態(tài),根據(jù)后臺數(shù)據(jù)庫的反饋形成提交結(jié)果,輸出到響應(yīng)對象中供長連接程序讀取。
長連接程序根據(jù)留言提交的結(jié)果構(gòu)造響應(yīng)主體,使用響應(yīng)主體構(gòu)造響應(yīng)返回瀏覽器,用戶此時可以看到網(wǎng)絡(luò)狀態(tài)查詢的結(jié)果。
由于客戶端和網(wǎng)絡(luò)服務(wù)器之間采用長連接,因此當(dāng)客戶端連續(xù)多次查詢網(wǎng)絡(luò)狀態(tài)時,不需要與網(wǎng)絡(luò)服務(wù)器重新建立連接,使得網(wǎng)絡(luò)服務(wù)器與客戶端之間的連接的速度顯著提高,并且,根據(jù)客戶端發(fā)送的請求以及網(wǎng)絡(luò)服務(wù)器返回的響應(yīng)中均未攜帶頭部,節(jié)約了網(wǎng)絡(luò)服務(wù)器與客戶端之間的通信帶寬。
對前述通信處理裝置的功能結(jié)構(gòu)進(jìn)行說明,參見圖8,圖8是本發(fā)明實(shí)施例提供的通信處理裝置200的一個可選的功能結(jié)構(gòu)示意圖,包括:連接單元201、接收單元202、構(gòu)造單元203、獲取單元204和響應(yīng)單元205。
連接單元201,用于在網(wǎng)絡(luò)服務(wù)器側(cè)與各客戶端之間分別建立基于網(wǎng)絡(luò)套接字的連接,保持與每個客戶端之間所建立的連接;連接單元201用于運(yùn)行長連接程序,與客戶端基于三次握手協(xié)議,建立基于網(wǎng)絡(luò)套接字的連接,連接的過程包括如下幾個階段:
階段1)連接單元201監(jiān)聽:連接單元201并不定位具體的客戶端套接字,而是處于等待連接的狀態(tài),實(shí)時監(jiān)控網(wǎng)絡(luò)狀態(tài),等待客戶端的連接請求。
階段2)客戶端請求:指客戶端的套接字提出連接請求,要連接的目標(biāo)是網(wǎng)絡(luò)服務(wù)器的套接字。為此,客戶端的套接字必須首先描述它要連接的網(wǎng)絡(luò)服務(wù)器的套接字,指出網(wǎng)絡(luò)服務(wù)器套接字的IP地址和端口號,然后就向網(wǎng)絡(luò)服務(wù)器套接字提出連接請求。
另外,在連接建立之后,客戶端還需要與網(wǎng)絡(luò)服務(wù)器保持所建立的連接,對于保持連接而言,客戶端在建立連接時向網(wǎng)絡(luò)服務(wù)器發(fā)送的連接請求的頭部中使用如下的用于保持連接時長的代碼:
Connection:keep-alive;
則客戶端與網(wǎng)絡(luò)服務(wù)器之間的連接將保持打開狀態(tài),于是,客戶端可以復(fù)用該連接多次向網(wǎng)絡(luò)服務(wù)器發(fā)送請求。保持連接節(jié)省了為每個請求建立新連接所需的時間,還節(jié)約了帶寬。其中,keep-alive用于限制連接的保持時間,在keep-alive計(jì)時到達(dá)后,連接可以被釋放。
如果連接單元201運(yùn)行的長連接程序檢測到這里的值為“keep-alive”,或者檢測到客戶端建立連接使用的請求中指定使用的是HTTP 1.1(HTTP 1.1默認(rèn)進(jìn)行持久連接)協(xié)議,則網(wǎng)絡(luò)服務(wù)器將與客戶端建立持久連接。
階段3)連接單元201連接確認(rèn):當(dāng)網(wǎng)絡(luò)服務(wù)器端接收到客戶端套接字的連接請求時,就響應(yīng)客戶端套接字的請求,建立一個新的線程,把服務(wù)器端套接字的描述發(fā)給客戶端,一旦客戶端確認(rèn)了此描述,雙方就正式建立連接。當(dāng)套接字長連接成功后,客戶端發(fā)送一個握手的消息給到網(wǎng)絡(luò)服務(wù)器表示連接建立成功。而連接單元201的繼續(xù)處于監(jiān)聽狀態(tài),繼續(xù)接收其他客戶端套接字的連接請求。
接收單元202,用于通過連接接收相應(yīng)客戶端所發(fā)送的請求,每個請求中攜帶公共網(wǎng)關(guān)接口程序的統(tǒng)一資源定位符、以及請求主體。
如上表3所示,接收的客戶端的請求中未攜帶有請求頭部,這樣,當(dāng)客戶端服用套接字長連接向網(wǎng)絡(luò)服務(wù)器的長連接程序發(fā)送請求時,因?yàn)椴恍枰獋鬏擟ookie等數(shù)據(jù)量較大的信息,因此能夠顯著節(jié)省帶寬。
構(gòu)造單元203,用于從連接中提取的信息而構(gòu)造請求頭部,結(jié)合請求頭部、以及客戶端發(fā)送的請求中攜帶的統(tǒng)一資源定位符,在網(wǎng)絡(luò)服務(wù)器的內(nèi)存空間中構(gòu)造用于存儲統(tǒng)一資源定位符以及請求頭部的各個元素的請求對象,請求對象分配有相應(yīng)的指針;針對客戶端發(fā)送的URL對應(yīng)的公共網(wǎng)關(guān)接口程序,為相應(yīng)的公共網(wǎng)關(guān)接口程序在內(nèi)存空間中構(gòu)造響應(yīng)對象。
例如,構(gòu)造單元203從與客戶端建立的連接中提取用于構(gòu)造請求頭部的元素,基于所提取的元素并結(jié)合統(tǒng)一資源定位符構(gòu)造請求對象以在網(wǎng)絡(luò)服務(wù)器的內(nèi)存空間中進(jìn)行存儲。
獲取單元204,用于將請求對象以及構(gòu)造的響應(yīng)對象傳遞給公共網(wǎng)關(guān)接口程序,從響應(yīng)對象中獲取公共網(wǎng)關(guān)接口程序的處理結(jié)果;
例如,獲取單元204根據(jù)統(tǒng)一資源定位符啟動網(wǎng)絡(luò)服務(wù)器中的公共網(wǎng)關(guān)接口程序,將請求對象的指針,以及響應(yīng)對象的指針作為入?yún)?,傳遞給啟動的公共網(wǎng)關(guān)接口程序,供公共網(wǎng)關(guān)接口程序在啟動時基于請求頭部的元素、以及公共網(wǎng)關(guān)接口程序完成相應(yīng)的環(huán)境變量的初始化;
獲取單元204根據(jù)統(tǒng)一資源定位符啟動公共網(wǎng)關(guān)接口程序后,根據(jù)客戶端發(fā)送的請求所使用的方法,獲取客戶端所提交的數(shù)據(jù),對數(shù)據(jù)進(jìn)行處理形成處理結(jié)果。
例如,如客戶端發(fā)送的請求中指示使用獲取方法,則從統(tǒng)一資源定位符的尾部提取客戶端提交的數(shù)據(jù),并存儲在特定環(huán)境變量中供公共網(wǎng)關(guān)接口程序讀取。
例如,如客戶端發(fā)送的請求中指示使用附加方法,從消息體中提取客戶端提交的數(shù)據(jù),并存儲在對應(yīng)公共網(wǎng)關(guān)接口程序的標(biāo)準(zhǔn)輸入接口供公共網(wǎng)關(guān)接口程序讀取。
響應(yīng)單元205,還用于基于使用處理結(jié)果而構(gòu)造的響應(yīng)主體,來構(gòu)造針對請求的響應(yīng),通過連接向相應(yīng)的客戶端返回。
響應(yīng)包括:狀態(tài)碼:響應(yīng)主體(響應(yīng)中的消息體),與前表2中網(wǎng)絡(luò)服務(wù)器通過短連接向客戶端返回的響應(yīng)相比,長連接程序待向客戶端返回的相應(yīng)中未攜帶有響應(yīng)頭部,由于響應(yīng)頭部包括了Cookie等容量較大的信息,因此能夠顯著節(jié)約網(wǎng)絡(luò)服務(wù)器與客戶端之間的帶寬。
與前述記載的通信處理方案基于同一構(gòu)思,本發(fā)明實(shí)施例還提供一種存儲介質(zhì),存儲有可執(zhí)行指令,用于執(zhí)行如本發(fā)明實(shí)施例圖5和圖6任一附圖提供的通信處理方法,本發(fā)明實(shí)施例提供的存儲介質(zhì)可為光盤、閃存或磁盤等存儲介質(zhì),可選為非瞬間存儲介質(zhì)。
綜上所述,本發(fā)明實(shí)施例具有以下有益效果:
網(wǎng)絡(luò)服務(wù)器與客戶端之間建立保持的連接,對于客戶端來說可以復(fù)用與網(wǎng)絡(luò)服務(wù)器之間的連接向網(wǎng)絡(luò)服務(wù)器發(fā)送請求,避免了重復(fù)建立連接的情況,對于網(wǎng)絡(luò)服務(wù)器與客戶端而言,能夠提升訪問網(wǎng)絡(luò)服務(wù)器的效率;
在網(wǎng)絡(luò)服務(wù)器側(cè)通過構(gòu)造請求對象傳遞給公共網(wǎng)關(guān)接口程序,一方面保證了傳遞必要的信息給公共網(wǎng)關(guān)接口程序形成處理結(jié)果,另一方面,對于客戶端來說,發(fā)送請求時在請求中不需要再攜帶請求同步,顯著節(jié)約網(wǎng)絡(luò)服務(wù)器與客戶端之間的帶寬;
網(wǎng)絡(luò)服務(wù)器向客戶端發(fā)送的響應(yīng),響應(yīng)主體中攜帶公共網(wǎng)關(guān)接口程序形成的處理結(jié)果,一方面,能夠向客戶端正常返回公共網(wǎng)關(guān)接口程序的處理結(jié)果,另一方面,由于沒有攜帶響應(yīng)頭部,進(jìn)一步顯著節(jié)約網(wǎng)絡(luò)服務(wù)器與客戶端之間的帶寬。
以上所述,僅為本發(fā)明的具體實(shí)施方式,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到變化或替換,都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)以所述權(quán)利要求的保護(hù)范圍為準(zhǔn)。