分案說明
本申請屬于申請日為2011年11月02日的中國發(fā)明專利申請201180053899.8的分案申請。
背景技術(shù):
超文本傳輸協(xié)議(http)是無狀態(tài)的遠(yuǎn)程過程調(diào)用(rpc)類型協(xié)議,其要求客戶端和服務(wù)器之間的通信并且遵循嚴(yán)格的請求-響應(yīng)模式。http將數(shù)據(jù)從客戶端流送到服務(wù)器或從服務(wù)器流送到客戶端。當(dāng)前,從客戶端到服務(wù)器和從服務(wù)器到客戶端的雙向流送要求兩個傳輸控制協(xié)議(tcp)連接,以分別在客戶端和服務(wù)器之間流送數(shù)據(jù)。第一tcp連接由客戶端用來將請求流送到服務(wù)器,而第二tcp連接由服務(wù)器用來將響應(yīng)流送到客戶端。
例如,對于客戶端到服務(wù)器通信,方法包括hangingget、長輪詢、以及輪詢。hangingget方法包括未決(pending)rpc協(xié)議,其允許服務(wù)器在任何時間將響應(yīng)數(shù)據(jù)流送到客戶端。來自客戶端的請求不包括初始握手請求,并且該請求不包含數(shù)據(jù)。長輪詢方法類似于hangingget方法,但是來自服務(wù)器的響應(yīng)對于服務(wù)器發(fā)送至客戶端的每條數(shù)據(jù)被終止??蛻舳吮灰蟪跏蓟聄pc協(xié)議,以接收下一個消息。輪詢方法要求客戶端通過周期性地生成新rpc協(xié)議以從服務(wù)器接收數(shù)據(jù)來輪詢服務(wù)器。
例如,對于服務(wù)器到客戶端通信,方法包括一次發(fā)送一個請求和長期存活的請求。一次發(fā)送一個請求方法要求第一請求作為承載應(yīng)用層協(xié)議語義的握手請求被發(fā)送。長期存活的請求方法要求單個rpc協(xié)議繼續(xù)將請求數(shù)據(jù)發(fā)送至服務(wù)器。當(dāng)請求數(shù)據(jù)的流送結(jié)束時,rpc協(xié)議完成。
這些雙tcp連接方法是雙向的但是不是雙工的。這樣的雙tcp連接方法招致增加的成本,其進(jìn)而引入增加的開銷。增加的tcp連接消耗系統(tǒng)和網(wǎng)絡(luò)資源。每個都在不同的tcp連接上發(fā)生的請求流送和響應(yīng)流送要求兩個連接保持被激活。這增加附加的網(wǎng)絡(luò)業(yè)務(wù)。雙tcp連接方法還使得http不足以用作獨立協(xié)議,同時要求附加的應(yīng)用級協(xié)議來處理兩個連接。
技術(shù)實現(xiàn)要素:
實施例涉及服務(wù)器和客戶端之間的數(shù)據(jù)流送能力。在第一實施例中,計算機(jī)實現(xiàn)的方法向具有全雙工能力的客戶端提供經(jīng)由單個協(xié)議連接通過基于遠(yuǎn)程過程調(diào)用的通信協(xié)議建立全雙工雙向通信流的能力。全雙工通信經(jīng)由網(wǎng)絡(luò)通過具有全雙工能力的客戶端和服務(wù)器之間的單個協(xié)議連接被發(fā)起,其中,具有全雙工能力的客戶端被配置成通過將初始握手發(fā)送至服務(wù)器來占用(engage)服務(wù)器。在服務(wù)器通過單個協(xié)議連接經(jīng)由網(wǎng)絡(luò)接受初始握手之后,客戶端請求流通過全雙工客戶端被流送至服務(wù)器。通過單個協(xié)議連接從服務(wù)器接受響應(yīng)流,同時具有全雙工能力的客戶端通過單個協(xié)議連接流送客戶端請求流。當(dāng)客戶端請求流和響應(yīng)流同時通過單個協(xié)議連接通信時,通過基于遠(yuǎn)程過程調(diào)用的通信協(xié)議使能全雙工雙向通信流。
在第二實施例中,系統(tǒng)向具有全雙工能力的服務(wù)器提供經(jīng)由單個協(xié)議連接通過基于遠(yuǎn)程過程調(diào)用的通信協(xié)議建立全雙工雙向通信流的能力。服務(wù)器連接模塊完成經(jīng)由網(wǎng)絡(luò)通過具有全雙工能力的服務(wù)器和客戶端之間的單個協(xié)議連接的全雙工通信的初始化,其中,具有全雙工能力的服務(wù)器被配置成接受來自客戶端的初始握手。服務(wù)器接受模塊通過單個協(xié)議連接接受請求流。服務(wù)器傳遞模塊將由具有全雙工能力的服務(wù)器接收的請求流傳送至服務(wù)器應(yīng)用。服務(wù)器流送模塊通過單個協(xié)議連接經(jīng)由網(wǎng)絡(luò)由應(yīng)用將包括對請求流的應(yīng)用響應(yīng)的服務(wù)器響應(yīng)流流送至客戶端。當(dāng)服務(wù)器響應(yīng)流和請求流同時使用單個協(xié)議連接時,服務(wù)器使能模塊通過基于遠(yuǎn)程過程調(diào)用的通信協(xié)議使能全雙工雙向通信流。
以下參考附圖詳細(xì)地描述進(jìn)一步實施例、特征、和優(yōu)點以及各個實施例的結(jié)構(gòu)和操作。
附圖說明
參考附圖描述實施例。在圖中,類似參考數(shù)字可以指示相同或功能類似的元件。
圖1示出根據(jù)實施例的全雙工雙向通信系統(tǒng);
圖2示出根據(jù)實施例的包括客戶端應(yīng)用和服務(wù)器應(yīng)用的全雙工雙向通信系統(tǒng);
圖3示出根據(jù)實施例的客戶端服務(wù)器全雙工雙向通信協(xié)議;
圖4示出根據(jù)實施例的全雙工雙向通信系統(tǒng)架構(gòu);
圖5示出根據(jù)實施例的用于具有全雙工能力的客戶端的操作的示范方面的流程圖;
圖6示出根據(jù)實施例的示出用于具有全雙工能力的服務(wù)器的操作的示范方面的流程圖。
具體實施方式
全雙工雙向通信提供通過單個協(xié)議連接服務(wù)器將數(shù)據(jù)流送到客戶端并且同時客戶端將數(shù)據(jù)流送到服務(wù)器的能力。在在此的具體實施方式中,對“一個實施例”、“實施例”、“示例實施例”等的引用指示所描述的實施例可以包括特定特征、結(jié)構(gòu)或特性,但是每個實施例可以不必包括該特定特征、結(jié)構(gòu)、或特性。而且,這樣的短語不必是指相同實施例。而且,當(dāng)特定特征、結(jié)構(gòu)或特性可以結(jié)合一實施例描述時,其可以被認(rèn)為,連同在此明確或未明確描述的其他實施例實現(xiàn)這樣的特征、結(jié)構(gòu)或特性,可以在本領(lǐng)域技術(shù)人員的認(rèn)識內(nèi)。
概述
圖1示出可以實現(xiàn)實施例或其部分的客戶端-服務(wù)器網(wǎng)絡(luò)系統(tǒng)100。系統(tǒng)100包括具有全雙工能力的服務(wù)器102、具有全雙工能力的客戶端112、網(wǎng)絡(luò)108、以及單個tcp連接130。
一般來說,一個或多個具有全雙工能力的客戶端112通過網(wǎng)絡(luò)108連接至具有全雙工能力的服務(wù)器102。在實施例中,具有全雙工能力的服務(wù)器102可以包括常規(guī)的web服務(wù)器、電子郵件服務(wù)器、或根據(jù)本公開中的教導(dǎo)修改的文件傳送服務(wù)器。具有全雙工能力的服務(wù)器102可以是包括至少一個處理器、至少一個存儲器、以及至少一個網(wǎng)絡(luò)接口的設(shè)備。
具有全雙工能力的客戶端112可以是包括至少一個處理器、至少一個存儲器、以及至少一個網(wǎng)絡(luò)接口的設(shè)備。例如,具有全雙工能力的客戶端112可以在個人計算機(jī)、手持計算機(jī)、個人數(shù)字助理、智能手機(jī)、移動電話、游戲控制臺、機(jī)頂盒等上實現(xiàn)。
網(wǎng)絡(luò)108可以包括一個或多個網(wǎng)絡(luò),諸如互聯(lián)網(wǎng)。在一些示例中,網(wǎng)絡(luò)108可以包括一個或多個廣域網(wǎng)(wan)或局域網(wǎng)(lan)。網(wǎng)絡(luò)108可以包括一種或多種網(wǎng)絡(luò)技術(shù),諸如以太網(wǎng)、快速以太網(wǎng)、吉比特以太網(wǎng)、諸如wifi的ieee802.11標(biāo)準(zhǔn)的變體等。通過網(wǎng)絡(luò)108的通信使用包括諸如tcp的可靠流協(xié)議的一個或多個網(wǎng)絡(luò)通信協(xié)議發(fā)生。這些示例是示意性的并且不用于限制本公開。
具有全雙工能力的客戶端112和具有全雙工能力的服務(wù)器102可以使用諸如tcp的協(xié)議通過網(wǎng)絡(luò)108進(jìn)行數(shù)據(jù)通信。tcp是可靠流協(xié)議,還被已知為保證傳遞協(xié)議或面向連接協(xié)議,其中,“可靠”和“保證傳遞”是指確保數(shù)據(jù)傳遞的協(xié)議的性質(zhì)??煽苛鲄f(xié)議提供從一個計算機(jī)到另一個計算機(jī)的字節(jié)流的可靠順序傳遞??煽苛鲄f(xié)議通過管理消息傳輸和確認(rèn)、丟棄的數(shù)據(jù)片段重傳、以及傳遞超時等確保數(shù)據(jù)傳遞。可靠流協(xié)議可以與不提供數(shù)據(jù)片段的可靠傳遞的“簡單”或“無連接”傳輸協(xié)議形成對比。無連接協(xié)議的一個這樣的示例是用戶數(shù)據(jù)報協(xié)議(udp)。在udp中,不存在被發(fā)送至接收方的數(shù)據(jù)片段在傳輸期間是否丟失的指示。如在此的描述中假定的本領(lǐng)域技術(shù)人員將理解的,遠(yuǎn)程過程協(xié)議(rpc)是實現(xiàn)諸如但不限于tcp的通信層協(xié)議的應(yīng)用層協(xié)議。
參考作為示范性可靠流協(xié)議的tcp描述在此的實施例;然而,識別根據(jù)本公開中的教導(dǎo)可采用的其他參考可靠流協(xié)議在本領(lǐng)域技術(shù)人員的認(rèn)識內(nèi)。
使能具有全雙工能力的服務(wù)器102和具有全雙工能力的客戶端112之間的數(shù)據(jù)通信的一種方法是建立具有全雙工能力的服務(wù)器102和具有全雙工能力的客戶端112之間的全雙工雙向通信。例如,與單獨協(xié)議連接上的雙向通信的常規(guī)方法相比,全雙工雙向通信使能通過單個協(xié)議連接在具有全雙工能力的服務(wù)器102和具有全雙工能力的客戶端112之間的數(shù)據(jù)流送。
全雙工雙向通信
圖2示出可以實現(xiàn)實施例或其部分的示例全雙工雙向通信系統(tǒng)200。系統(tǒng)200包括具有全雙工能力的服務(wù)器102、具有全雙工能力的客戶端112、網(wǎng)絡(luò)108、客戶端應(yīng)用280、服務(wù)器應(yīng)用230、以及單個tcp連接130。具有全雙工能力的服務(wù)器102包括服務(wù)器通信堆棧210和服務(wù)器代理220。具有全雙工能力的客戶端112包括客戶端通信堆棧260和客戶端代理270。網(wǎng)絡(luò)108包括網(wǎng)絡(luò)代理250。
在一個實施例中,具有全雙工能力的客戶端112和具有全雙工能力的服務(wù)器102使用rpc通信協(xié)議通過單個tcp連接130參與全雙工雙向通信。為了在不破壞rpc協(xié)議的語義的情況下使得這樣的雙向通信成為可能,通過插入必須語義以允許這樣的雙向通信的協(xié)議擴(kuò)展,來更改rpc協(xié)議。特別是,通過單個tpc連接130的全雙工雙向通信遵循諸如基本http請求-響應(yīng)語義的rpc通信協(xié)議語義,具有支持雙向通信的附加語義。以此方式,使用http通過單個tcp連接130的全雙工雙向通信提供能夠同時進(jìn)行全雙工的服務(wù)器102和具有全雙工能力的客戶端112之間的流送。
例如,在具有全雙工能力的客戶端112將請求發(fā)送至具有全雙工能力的服務(wù)器102的同時,具有全雙工能力的服務(wù)器102可以將響應(yīng)發(fā)送至具有全雙工能力的客戶端112。具有全雙工能力的服務(wù)器102和具有全雙工能力的客戶端112被明確地設(shè)計成支持同時流送。標(biāo)準(zhǔn)http不足以單獨支持通過單個tcp連接130的全雙工雙向通信。附加協(xié)議要求使能具有全雙工能力的服務(wù)器102和具有全雙工能力的客戶端112使用諸如http的rpc協(xié)議有效地參與通過單個tcp連接130的全雙工雙向通信。
具有全雙工能力的客戶端112經(jīng)由網(wǎng)絡(luò)108通過到具有全雙工能力的服務(wù)器102的單個tcp連接130,通過基于rpc的通信協(xié)議發(fā)起請求數(shù)據(jù)流。具有全雙工能力的服務(wù)器102接收請求數(shù)據(jù)流。具有全雙工能力的服務(wù)器102通過發(fā)起響應(yīng)數(shù)據(jù)流,對請求數(shù)據(jù)流作出響應(yīng)。具有全雙工能力的服務(wù)器102經(jīng)由網(wǎng)絡(luò)108通過到具有全雙工能力的客戶端112的單個tcp連接130,通過基于rpc的通信協(xié)議流送響應(yīng)數(shù)據(jù)流。具有全雙工能力的客戶端112接收響應(yīng)數(shù)據(jù)流。請求數(shù)據(jù)流和響應(yīng)數(shù)據(jù)流同時通過建立全雙工雙向通信的單個tcp連接130操作。
在一個實施例中,客戶端應(yīng)用280和服務(wù)器應(yīng)用230分別與具有全雙工能力的客戶端112和具有全雙工能力的服務(wù)器102通信。如上所述,具有全雙工能力的客戶端112可以在個人計算機(jī)、手持計算機(jī)、個人數(shù)字助理、智能電話、移動電話、游戲控制臺、機(jī)頂盒等上實現(xiàn)。在此的說明書中假定的本領(lǐng)域技術(shù)人員將理解,客戶端應(yīng)用280包括在以上任何一個上操作的應(yīng)用。如在此的說明書中假定的相關(guān)技術(shù)領(lǐng)域中的技術(shù)人員將理解,服務(wù)器應(yīng)用230包括在以上任何一個上操作的應(yīng)用。
客戶端應(yīng)用280發(fā)起對具有全雙工能力的客戶端112的請求,以與服務(wù)器應(yīng)用230通信。具有全雙工能力的客戶端112向具有全雙工能力的服務(wù)器102發(fā)起包含客戶端應(yīng)用280的請求的請求數(shù)據(jù)流。具有全雙工能力的服務(wù)器102接收請求數(shù)據(jù)流,并且實時地將請求從客戶端應(yīng)用280傳遞至服務(wù)器應(yīng)用230。服務(wù)器應(yīng)用230處理請求,并且將對請求的響應(yīng)發(fā)送至具有全雙工能力的服務(wù)器102。具有全雙工能力的服務(wù)器102發(fā)起包含對由服務(wù)器應(yīng)用230發(fā)送的請求的響應(yīng)的響應(yīng)數(shù)據(jù)流。具有全雙工能力的服務(wù)器102將響應(yīng)數(shù)據(jù)流流送到具有全雙工能力的客戶端112。具有全雙工能力的客戶端112接收響應(yīng)數(shù)據(jù)流,并且將響應(yīng)從服務(wù)器應(yīng)用230傳遞到客戶端應(yīng)用280。請求數(shù)據(jù)流和響應(yīng)數(shù)據(jù)流同時通過建立全雙工雙向通信的單個tcp連接130操作。
在一個實施例中,具有全雙工能力的客戶端112和具有全雙工能力的服務(wù)器102之間的全雙工雙向通信可以由服務(wù)器應(yīng)用230完全控制。全雙工雙向通信可以限于已由具有全雙工能力服務(wù)器102明確識別的客戶端??梢砸蟛皇芊?wù)器應(yīng)用230控制的客戶端應(yīng)用280通過向服務(wù)器應(yīng)用230流送url參數(shù)和/或報頭告知其能力,以參與全雙工雙向通信。不受服務(wù)器應(yīng)用230控制和/或不被服務(wù)器應(yīng)用230驗證為具有全雙工雙向通信能力的客戶端應(yīng)用280不應(yīng)該參與全雙工雙向通信。
在一個實施例中,當(dāng)客戶端代理270、網(wǎng)絡(luò)代理250、以及服務(wù)器代理220允許這樣的全雙工通信時,可以建立具有全雙工能力的客戶端112和具有全雙工能力的服務(wù)器102之間的全雙工通信。如在此的說明書中假定的相關(guān)領(lǐng)域中的技術(shù)人員將理解,代理用作用于諸如但不限于設(shè)法使用彼此的資源的客戶端、服務(wù)器、或網(wǎng)絡(luò)的通信設(shè)備之間的請求的中介。代理依賴用于允許或不允許對代理代表的通信設(shè)備的訪問的過濾規(guī)則。例如,代理可以使用允許基于諸如http的通信協(xié)議的請求來訪問通信設(shè)備但是不允許基于其他協(xié)議的請求的過濾規(guī)則。
網(wǎng)絡(luò)代理250、服務(wù)器代理220、以及客戶端代理270分別包括允許基于基于rpc的通信協(xié)議的數(shù)據(jù)流流送到網(wǎng)絡(luò)108、具有全雙工能力的服務(wù)器102、以及具有全雙工能力的客戶端112的過濾規(guī)則。如果數(shù)據(jù)流基于不同于rpc的通信協(xié)議,則網(wǎng)絡(luò)代理250、服務(wù)器代理220、以及客戶端代理270可以分別拒絕對網(wǎng)絡(luò)108、具有全雙工能力的服務(wù)器102、以及具有全雙工能力的客戶端112的數(shù)據(jù)流訪問。然而,由具有全雙工能力的客戶端112和具有全雙工能力的服務(wù)器102生成的請求和響應(yīng)數(shù)據(jù)流是基于rpc的通信協(xié)議。結(jié)果,網(wǎng)絡(luò)代理250、服務(wù)器代理220、以及客戶端代理270允許請求和響應(yīng)數(shù)據(jù)流經(jīng)由網(wǎng)絡(luò)108在具有全雙工能力的客戶端112和具有全雙工能力的服務(wù)器102之間自由地流動。
在一個實施例中,網(wǎng)絡(luò)代理250、服務(wù)器代理220、以及客戶端代理270可以不允許來自具有全雙工能力的服務(wù)器102的早響應(yīng)。網(wǎng)絡(luò)代理250、服務(wù)器代理220、以及客戶端代理270還可以緩沖來自具有全雙工能力的客戶端112的請求和來自具有全雙工能力的服務(wù)器102的響應(yīng)。在緩沖時,客戶端應(yīng)用280和/或服務(wù)器應(yīng)用230可以從全雙工雙向通信切換至使用兩個連接而不是單個tcp連接130的不同協(xié)議。具有全雙工能力的客戶端112和具有全雙工能力的服務(wù)器102可以實現(xiàn)這樣的退回技術(shù),諸如輪詢。具有全雙工能力的客戶端112還可以實現(xiàn)在短超時時間段內(nèi)等待來自具有全雙工能力的服務(wù)器102的初始響應(yīng)的退回技術(shù)。
在一個實施例中,具有全雙工能力的客戶端112和具有全雙工能力的服務(wù)器102中的每個都具有通信接口。客戶端通信堆棧260用作用于具有全雙工能力的客戶端112的通信接口。服務(wù)器通信堆棧210用作用于具有全雙工能力的服務(wù)器102的通信接口。
具有全雙工能力的服務(wù)器102的客戶端通信堆棧260接收由客戶端應(yīng)用280生成的請求。客戶端通信堆棧260經(jīng)由網(wǎng)絡(luò)108通過單個tcp連接130向服務(wù)器通信堆棧210發(fā)起請求數(shù)據(jù)流。由具有全雙工能力的客戶端112生成的請求數(shù)據(jù)流基于基于rpc的通信協(xié)議,所以網(wǎng)絡(luò)代理250和服務(wù)器代理220允許請求數(shù)據(jù)流流過網(wǎng)絡(luò)并且訪問具有全雙工能力的服務(wù)器102。服務(wù)器通信堆棧210從具有全雙工能力的客戶端112接收請求數(shù)據(jù)流,并且將請求數(shù)據(jù)流傳送至服務(wù)器應(yīng)用230。
服務(wù)器應(yīng)用230將對請求數(shù)據(jù)流的響應(yīng)發(fā)送至服務(wù)器通信堆棧210。服務(wù)器通信堆棧210經(jīng)由網(wǎng)絡(luò)108通過單個tcp連接130向客戶端通信堆棧260發(fā)起響應(yīng)數(shù)據(jù)流。由具有全雙工能力的服務(wù)器102生成的響應(yīng)數(shù)據(jù)流基于基于rpc的通信協(xié)議,所以網(wǎng)絡(luò)代理250和客戶端代理270允許響應(yīng)數(shù)據(jù)流流過網(wǎng)絡(luò)108并且訪問具有全雙工能力的客戶端112??蛻舳送ㄐ哦褩?60接收響應(yīng)數(shù)據(jù)流并且將響應(yīng)發(fā)送至客戶端應(yīng)用280。請求數(shù)據(jù)流和響應(yīng)數(shù)據(jù)流同時通過建立全雙工雙向通信的單個tcp連接130操作。服務(wù)器通信堆棧210和客戶端通信堆棧260提供消息傳遞支持和所要求的傳遞擔(dān)保。
全雙工雙向通信語義
圖3示出可以實現(xiàn)實施例或其部分的示例全雙工雙向通信系統(tǒng)300。系統(tǒng)300包括具有全雙工能力的客戶端112和具有全雙工能力的服務(wù)器102。具有全雙工能力的客戶端112和具有全雙工能力的服務(wù)器102參與一系列數(shù)據(jù)交換,以建立全雙工雙向通信。
在一個實施例中,具有全雙工能力的客戶端112和具有全雙工能力的服務(wù)器102通過遵循一系列全雙工雙向通信語義建立全雙工通信。具有全雙工能力的客戶端112通過將初始握手請求310發(fā)送至具有全雙工能力的服務(wù)器102,發(fā)起與具有全雙工能力的服務(wù)器102的全雙工通信。具有全雙工能力的服務(wù)器102接受或拒絕初始握手請求310。如果具有全雙工能力的服務(wù)器102拒絕初始握手請求310,則具有全雙工能力的客戶端112和具有全雙工能力的服務(wù)器102之間的全雙工通信失敗。
如果具有全雙工能力的服務(wù)器102接受來自具有全雙工能力的客戶端112的初始握手請求310,則建立具有全雙工能力的服務(wù)器102和具有全雙工能力的客戶端112之間的全雙工通信。具有全雙工能力的服務(wù)器102通過以初始握手接受320進(jìn)行響應(yīng),接受初始握手請求310。一旦具有全雙工能力的客戶端112接收到初始握手接受320,則具有全雙工能力的客戶端112和具有全雙工能力的服務(wù)器102之間的全雙工通信就完成。
在一個實施例中,具有全雙工能力的客戶端112和具有全雙工能力的服務(wù)器102之間的全雙工通信可以通過基于http語義的握手的完成被建立。初始握手請求310遵循h(huán)ttp語義。具有全雙工能力的客戶端112將http請求發(fā)送至具有全雙工能力的服務(wù)器102。http請求之后為主體(body)完成初始握手請求310。初始握手接受320也遵循h(huán)ttp語義,其中,具有全雙工能力的服務(wù)器102通過將響應(yīng)報頭發(fā)送至具有全雙工能力的客戶端112對初始握手請求310進(jìn)行響應(yīng)。一旦具有全雙工能力的客戶端112從具有全雙工能力的服務(wù)器102接收到報頭,基于http的握手就完成,并且建立具有全雙工能力的客戶端112和具有全雙工能力的服務(wù)器102之間的全雙工通信。
在一個實施例中,接著通過具有全雙工能力的客戶端112接收初始握手接受320,發(fā)起具有全雙工能力的客戶端112和具有全雙工能力的服務(wù)器102之間的數(shù)據(jù)流。具有全雙工能力的客戶端112發(fā)起請求流330,并且將請求流330流送到具有全雙工能力的服務(wù)器102。具有全雙工能力的服務(wù)器102從具有全雙工能力的客戶端112接收請求流330,并且在完成請求流330之前,通過將響應(yīng)流340流送至具有全雙工能力的客戶端112來響應(yīng)。當(dāng)通過單個tcp連接130,具有全雙工能力的客戶端112將請求流330流送至具有全雙工能力的服務(wù)器102并且同時具有全雙工能力的服務(wù)器102將響應(yīng)流340流送至具有全雙工能力的客戶端112時,可以建立全雙工雙向通信350。
在一個實施例中,全雙工雙向通信350在具有全雙工能力的客戶端112和具有全雙工能力的服務(wù)器102之間繼續(xù),直到具有全雙工能力的客戶端112終止請求流330為止。通過具有全雙工能力的客戶端112終止請求流330終止全雙工雙向通信350,但是不終止通信鏈路。具有全雙工能力的客戶端112繼續(xù)接收來自具有全雙工能力的服務(wù)器102的響應(yīng)流340,只要具有全雙工能力的服務(wù)器102繼續(xù)流送響應(yīng)流340即可。當(dāng)具有全雙工能力的服務(wù)器102終止流送響應(yīng)流340并且具有全雙工能力的客戶端112接收表示響應(yīng)流340的結(jié)束的響應(yīng)流終止370時,終止全雙工通信。
在具有全雙工能力的服務(wù)器102接收到表示請求流330的結(jié)束的請求流終止360之前,具有全雙工能力的服務(wù)器102可以終止響應(yīng)流340。在響應(yīng)流340已被終止之后請求流330繼續(xù)的情況下,在接收到請求流終止360之前終止響應(yīng)流340的具有全雙工能力的服務(wù)器102在http中被認(rèn)為處于非法狀態(tài)。從而,具有全雙工能力的客戶端112可以在從具有全雙工能力的服務(wù)器102接收到表示響應(yīng)流340的結(jié)束的響應(yīng)流終止370時,立即終止請求流330。
在一個實施例中,具有全雙工能力的客戶端112和具有全雙工能力的服務(wù)器102之間的全雙工雙向通信350通過可以包括http的基于rpc的通信協(xié)議被建立。在這樣的實施例中,全雙工雙向通信350遵循標(biāo)準(zhǔn)http語義。在通常涉及完整報頭的接受的通過具有全雙工能力的服務(wù)器102的初始握手請求310成功之后,具有全雙工能力的客戶端112向具有全雙工能力的服務(wù)器102發(fā)起請求流330。遵循h(huán)ttp語義,具有全雙工能力的服務(wù)器102拒絕生成響應(yīng)流340,直到具有全雙工能力的服務(wù)器102已經(jīng)從具有全雙工能力的客戶端112接收到一部分請求流330為止。
一旦具有全雙工能力的服務(wù)器102已從具有全雙工能力的客戶端112接收到請求流330,具有全雙工能力的服務(wù)器102就向具有全雙工能力的客戶端112發(fā)起響應(yīng)流340。具有全雙工能力的服務(wù)器102避免終止響應(yīng)流340的流送,直到具有全雙工能力的服務(wù)器102已經(jīng)從具有全雙工能力的客戶端112接收到表示請求流330的結(jié)束的請求流終止360為止。具有全雙工能力的客戶端112繼續(xù)從具有全雙工能力的服務(wù)器102接收響應(yīng)流340,直到具有全雙工能力的客戶端112從具有全雙工能力的服務(wù)器102接收到表示響應(yīng)流340的結(jié)束的響應(yīng)流終止370為止。
在一個實施例中,具有全雙工能力的客戶端112和具有全雙工能力的服務(wù)器102之間的全雙工雙向通信350基于錯誤情況被終止。特別是,當(dāng)具有全雙工能力的客戶端112從具有全雙工能力的服務(wù)器102接收到響應(yīng)流340中的錯誤響應(yīng)時,具有全雙工能力的客戶端112終止請求流330,由此終止全雙工雙向通信350。
當(dāng)具有全雙工能力的客戶端112不能流送請求流330時或者當(dāng)請求流330超時時,具有全雙工能力的客戶端112終止請求流330,由此終止全雙工雙向通信350。同樣地,當(dāng)具有全雙工能力的服務(wù)器102不能流送響應(yīng)流340時或者當(dāng)響應(yīng)流340超時時,具有全雙工能力的服務(wù)器102終止響應(yīng)流340,由此終止全雙工雙向通信350。
在一個實施例中,具有全雙工能力的客戶端112和具有全雙工能力的服務(wù)器102之間的全雙工雙向通信350可以支持管線傳輸(pipelining)。具有全雙工能力的客戶端112和具有全雙工能力的服務(wù)器102可以通過保持永久連接來支持管線傳輸。當(dāng)參與全雙工雙向通信350時,具有全雙工能力的客戶端112和具有全雙工能力的服務(wù)器102通過使用相同的單個tcp連接130而不是在不同tcp連接之間交換,保持永久連接。當(dāng)生成請求流330時的具有全雙工能力的客戶端112可以使單個tcp連接130不可用于管線傳輸請求。在請求流330終止之后繼續(xù)響應(yīng)流340的具有全雙工能力的服務(wù)器102可以防止任何管線傳輸請求被處理。
系統(tǒng)400
圖4是可以實現(xiàn)本發(fā)明的實施例或其部分的示例系統(tǒng)架構(gòu)400。系統(tǒng)架構(gòu)400包括耦接至客戶端應(yīng)用280的客戶端初始化模塊402。客戶端使能模塊408還可以耦接至客戶端應(yīng)用280。
服務(wù)器傳遞模塊414可以耦接至服務(wù)器應(yīng)用230。服務(wù)器流送模塊416還可以耦接至服務(wù)器應(yīng)用230。雖然圖4中所示的實施例示出耦接至客戶端初始化模塊402和客戶端使能模塊408的客戶端應(yīng)用280以及耦接至服務(wù)器傳遞模塊414和服務(wù)器流送模塊416的服務(wù)器應(yīng)用230,但是重點要注意,實施例可以用于在諸如網(wǎng)絡(luò)化的基于云的架構(gòu)的多種不同類型的計算機(jī)實現(xiàn)的數(shù)據(jù)源、系統(tǒng)和架構(gòu)之間交換數(shù)據(jù)。
具有全雙工能力的客戶端112包括客戶端通信堆棧260、初始化初始握手請求310的客戶端初始化模塊402、生成請求流330的客戶端流送模塊404、接收響應(yīng)流340的客戶端接受模塊406、以及客戶端使能模塊408。具有全雙工能力的服務(wù)器102包括服務(wù)器通信堆棧210、接收初始握手請求310的服務(wù)器連接模塊410、接收請求流330的服務(wù)器接受模塊412、傳送請求流330的服務(wù)器傳遞模塊414、接收服務(wù)器響應(yīng)470并且生成響應(yīng)流340的服務(wù)器流送模塊416、以及服務(wù)器使能模塊418。具有全雙工能力的客戶端112和具有全雙工能力的服務(wù)器102通過單個tcp連接130通信。
通常,具有全雙工能力的客戶端112和具有全雙工能力的服務(wù)器102之間的全雙工雙向通信如下操作??蛻舳藨?yīng)用280提供客戶端請求420,其中,客戶端請求420是初始化與服務(wù)器應(yīng)用230的通信的請求??蛻舳顺跏蓟K402從客戶端應(yīng)用280接收客戶端請求420?;诳蛻舳苏埱?20,客戶端初始化模塊402生成初始握手請求310,以初始化通過具有全雙工能力的客戶端112和具有全雙工能力的服務(wù)器102之間的單個tcp連接130的全雙工通信。諸如單個tcp連接130的通信鏈路可以跨越流送rpc連接被重新使用。
在一個實施例中,客戶端通信堆棧260和服務(wù)器通信堆棧210可以分別是用于具有全雙工能力的客戶端112和具有全雙工能力的服務(wù)器102的接口。客戶端通信堆棧260從客戶端初始化模塊402接收初始握手請求310,并且通過單個tcp連接130將初始握手請求310發(fā)送至具有全雙工能力的服務(wù)器102。服務(wù)器通信堆棧210通過單個tcp連接130從具有全雙工能力的客戶端112接收初始握手請求310。服務(wù)器通信堆棧210將初始握手請求310發(fā)送至服務(wù)器連接模塊410。服務(wù)器連接模塊410接受完成通過單個tcp連接130的在具有全雙工能力的客戶端112和具有全雙工能力的服務(wù)器102之間的握手的初始握手請求310。
一旦通過單個tcp連接130的在具有全雙工能力的客戶端112和具有全雙工能力的服務(wù)器102之間的握手完成,客戶端流送模塊404就生成包含客戶端請求420的請求流330。客戶端通信堆棧260從客戶端流送模塊404接收請求流330,并且通過單個tcp連接130將請求流330流送到具有全雙工能力的服務(wù)器102。服務(wù)器通信堆棧210從具有全雙工能力的客戶端112接收請求流330。服務(wù)器通信堆棧210將請求流330發(fā)送至服務(wù)器接受模塊412。服務(wù)器接受模塊412接受請求流330。
在一個實施例中,服務(wù)器接受模塊412將請求流330發(fā)送至服務(wù)器傳遞模塊414。服務(wù)器傳遞模塊414將請求流330傳送至服務(wù)器應(yīng)用230。服務(wù)器應(yīng)用230接收包含客戶端請求420的請求流330,并且通過服務(wù)器響應(yīng)470來響應(yīng)客戶端請求420。服務(wù)器應(yīng)用230將服務(wù)器響應(yīng)470發(fā)送至服務(wù)器流送模塊416。服務(wù)器流送模塊416接收服務(wù)器響應(yīng)470,并且生成包含服務(wù)器響應(yīng)470的響應(yīng)流340。服務(wù)器流送模塊416將服務(wù)器響應(yīng)流340流送至服務(wù)器使能模塊418。
在一個實施例中,當(dāng)服務(wù)器使能模塊418將響應(yīng)流340流送到服務(wù)器通信堆棧210時,服務(wù)器使能模塊418使能通過單個tcp連接130的全雙工雙向通信流。當(dāng)具有全雙工能力的客戶端112將請求流330流送到使能全雙工雙向通信的具有全雙工能力的服務(wù)器102時,服務(wù)器通信堆棧210進(jìn)而通過單個tcp連接130將響應(yīng)流340發(fā)送至具有全雙工能力的客戶端112。
在一個實施例中,客戶端通信堆棧260通過單個tcp連接130從具有全雙工能力的服務(wù)器102接收響應(yīng)流340。客戶端通信堆棧260將響應(yīng)流340發(fā)送至客戶端接受模塊406??蛻舳私邮苣K406接受響應(yīng)流340,同時具有全雙工能力的客戶端112將請求流330流送到具有全雙工能力的服務(wù)器102??蛻舳私邮苣K將服務(wù)器響應(yīng)流340發(fā)送至客戶端使能模塊308。當(dāng)通過單個tcp連接130,響應(yīng)流340流送到具有全雙工能力的客戶端112并且同時請求流330流送到具有全雙工能力的服務(wù)器102時,客戶端使能模塊308使能具有全雙工能力的客戶端112和具有全雙工能力的服務(wù)器102之間的全雙工雙向通信。
模塊可以由具有全雙工能力的客戶端112和具有全雙工能力的服務(wù)器102使用。如在此參考的,模塊可以是具有一個或多個處理器的任何類型的處理(或計算)設(shè)備。例如,模塊可以是工作站、移動設(shè)備、計算機(jī)、計算機(jī)集群、機(jī)頂盒、或具有至少一個處理器的其他設(shè)備。在一個實施例中,多個模塊可以實現(xiàn)在同一處理設(shè)備上。軟件可以包括一個或多個應(yīng)用和操作系統(tǒng)。硬件可以包括但不限于處理器、存儲器、和/或圖形用戶界面顯示器。
方法500
圖5示出建立與具有全雙工能力的客戶端的全雙工雙向通信的示范方法500的流程圖。如圖5中所示,方法500在具有全雙工能力的客戶端發(fā)起與服務(wù)器的全雙工通信時開始于步驟510。例如,如圖1和圖3中所示,具有全雙工能力的客戶端112經(jīng)由網(wǎng)絡(luò)108通過具有全雙工能力的客戶端112和具有全雙工能力的服務(wù)器102之間的單個tcp連接130發(fā)起全雙工通信。具有全雙工能力的客戶端112被配置成通過將初始握手請求310發(fā)送至具有全雙工能力的服務(wù)器102,占用具有全雙工能力的服務(wù)器102。步驟510可以通過例如客戶端初始化模塊402執(zhí)行。一旦步驟510完成,方法500就進(jìn)行至步驟520。
在步驟520,具有全雙工能力的客戶端將客戶端請求流流送到服務(wù)器。例如,如圖1和圖3中所示,在通過單個tcp連接130經(jīng)由網(wǎng)絡(luò)108通過具有全雙工能力的服務(wù)器102的初始握手請求310的初始握手接受320之后,具有全雙工能力的客戶端112將請求流330流送到具有全雙工能力的服務(wù)器102。步驟520可以通過例如客戶端流送模塊404執(zhí)行。一旦步驟520完成,方法500就進(jìn)行至步驟530。
在步驟530,具有全雙工能力的客戶端接受來自服務(wù)器的響應(yīng)流。例如,如圖1和圖3中所示,具有全雙工能力的客戶端112通過單個tcp連接130接受來自具有全雙工能力的服務(wù)器102的響應(yīng)流340,同時具有全雙工能力的客戶端112通過單個tcp連接130流送請求流330。步驟540可以通過例如客戶端接受模塊406執(zhí)行。一旦步驟530完成,方法500就進(jìn)行至步驟540。
在步驟540中,通過基于遠(yuǎn)程過程調(diào)用的通信協(xié)議,使能全雙工雙向通信流。例如,如圖1和圖3中所示,當(dāng)請求流330和響應(yīng)流340同時通過單個tcp連接130通信時,通過基于遠(yuǎn)程過程調(diào)用的通信協(xié)議,使能全雙工雙向通信350。步驟540可以通過例如客戶端使能模塊408執(zhí)行。當(dāng)步驟540完成時,方法500結(jié)束。
實施例可以通過除了在此描述的那些之外的軟件、硬件、和/或操作系統(tǒng)實現(xiàn)工作。可以使用適用于執(zhí)行在此描述的功能的任何軟件、硬件、以及操作系統(tǒng)實現(xiàn)。實施例可應(yīng)用至客戶端和服務(wù)器或兩者。
方法600
圖6示出用于與具有全雙工能力的服務(wù)器建立全雙工雙向通信的示范方法600的流程圖。如圖6中所示,方法600開始于步驟610,其中,經(jīng)由網(wǎng)絡(luò)通過具有全雙工能力的服務(wù)器和客戶端之間的單個協(xié)議連接完成全雙工通信。例如,如圖1和圖3中所示,經(jīng)由網(wǎng)絡(luò)108通過具有全雙工能力的服務(wù)器102和具有全雙工能力的客戶端112之間的單個tcp連接130完成全雙工通信。具有全雙工能力的服務(wù)器102被配置成從具有全雙工能力的客戶端112接受初始握手請求310。步驟610可以通過例如服務(wù)器連接模塊410執(zhí)行。一旦步驟610完成,方法600就進(jìn)行至步驟720。
在步驟620,具有全雙工能力的服務(wù)器通過單個協(xié)議連接接受請求流。例如,如圖1和圖3中所示,具有全雙工能力的服務(wù)器102通過單個tcp連接130接受請求流330。步驟620可以通過例如服務(wù)器接受模塊412執(zhí)行。一旦步驟620完成,方法600就進(jìn)行至步驟630。
在步驟630,由具有全雙工能力的服務(wù)器接收的請求流被傳送至服務(wù)器應(yīng)用。例如,如圖1和圖2以及圖3中所示,由具有全雙工能力的服務(wù)器102接收的請求流330被傳送至服務(wù)器應(yīng)用230。步驟630可以通過例如服務(wù)器傳遞模塊414執(zhí)行。一旦步驟630完成,方法600就進(jìn)行至步驟740。
在步驟640,具有全雙工能力的服務(wù)器將服務(wù)器響應(yīng)流流送到客戶端。例如,如圖1和圖3中所示,具有全雙工能力的服務(wù)器102通過單個tcp連接130經(jīng)由網(wǎng)絡(luò)108通過服務(wù)器應(yīng)用230將包括對請求流330的應(yīng)用響應(yīng)的響應(yīng)流340流送到具有全雙工能力的客戶端112。步驟640可以通過例如服務(wù)器流送模塊416執(zhí)行。一旦步驟640完成,方法600就進(jìn)行至步驟650。
在步驟650,通過基于遠(yuǎn)程過程調(diào)用的通信協(xié)議,使能全雙工雙向通信流。例如,如圖1和圖3中所示,當(dāng)響應(yīng)流340和請求流330同時使用單個tcp連接130時,通過基于遠(yuǎn)程過程調(diào)用的通信協(xié)議使能全雙工雙向通信350。當(dāng)步驟650完成時,方法600結(jié)束。
實施例可以通過除了在此描述的那些之外的軟件、硬件、和/或操作系統(tǒng)實現(xiàn)工作??梢允褂眠m用于執(zhí)行在此描述的功能的任何軟件、硬件、和操作系統(tǒng)實現(xiàn)。實施例可應(yīng)用至客戶端和服務(wù)器或者兩者的結(jié)合。
結(jié)論
實施例可以通過除了在此描述的那些之外的軟件、硬件、和/或操作系統(tǒng)實現(xiàn)工作??梢允褂眠m用于執(zhí)行在此描述的功能的任何軟件、硬件、和操作系統(tǒng)實現(xiàn)。實施例可應(yīng)用至客戶端和服務(wù)器或者兩者的結(jié)合。
發(fā)明內(nèi)容和摘要部分可以闡述發(fā)明人預(yù)期的一個或多個但不是所有示范實施例,并且從而不旨在以任何方式限制本發(fā)明和所附權(quán)利要求。
通過示出指定功能的實現(xiàn)及其關(guān)系的功能塊的幫助,以上描述了實施例。為了描述的方便,這些功能塊的邊界可以在此被任意限定。只要指定功能及其關(guān)系被適當(dāng)?shù)貓?zhí)行,就可以限定替選邊界。
通過應(yīng)用本領(lǐng)域技術(shù)人員的知識,特定實施例的以上描述完全揭露了本發(fā)明的一般特性,在不脫離本發(fā)明的總體思想的情況下,容易地修改和/或適用于諸如特定實施例的多種應(yīng)用,而不需要不適當(dāng)?shù)膶嶒?。從而,基于在此呈現(xiàn)的教導(dǎo)和指導(dǎo),這樣的適配和修改旨在所公開的實施例的意義及其等價范圍內(nèi)。將理解,在此的措辭和術(shù)語用于描述而不用于限制的目的,使得本說明的術(shù)語或措辭將由技術(shù)人員根據(jù)教導(dǎo)和指導(dǎo)來解釋。
本發(fā)明的寬度和范圍不由上述示范實施例中的任一個限制,而是僅根據(jù)以下權(quán)利要求及其等價物限定。