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