此,可以提高服務(wù)端資源利用率,提高服務(wù)端吞吐量。
[0040]S13:所述服務(wù)端對所述調(diào)用請求進(jìn)行處理,獲取結(jié)果數(shù)據(jù),并將所述結(jié)果數(shù)據(jù)通過所述通道推送給所述客戶端。
[0041]其中,服務(wù)端接收到調(diào)用請求后,可以從服務(wù)提供商獲取調(diào)用請求對應(yīng)的服務(wù),例如,在購物時,調(diào)用請求是獲取寶貝詳情的api請求,那么服務(wù)端可以獲取寶貝詳情的頁面作為結(jié)果數(shù)據(jù)返回給客戶端。
[0042]具體的,服務(wù)端在獲取結(jié)果數(shù)據(jù)后,采用主動推送的方式將結(jié)果數(shù)據(jù)發(fā)送給客戶端。服務(wù)端在推送結(jié)果數(shù)據(jù)時,還可以同時包含與調(diào)用請求對應(yīng)的數(shù)據(jù)標(biāo)識信息,客戶端通過該數(shù)據(jù)標(biāo)識信息可以查找到其請求的結(jié)果數(shù)據(jù)。
[0043]本實(shí)施例通過在分配數(shù)據(jù)標(biāo)識信息后,釋放數(shù)據(jù)流占用的資源,可以實(shí)現(xiàn)對服務(wù)端資源的及時釋放,避免一直保持造成的資源浪費(fèi),該釋放的資源可以用于為其他客戶端提供服務(wù),因此可以降低服務(wù)端資源浪費(fèi),提高服務(wù)端資源利用率,提升服務(wù)端吞吐量。
[0044]圖2是本申請另一實(shí)施例提出的異步調(diào)用方法的流程示意圖,該方法包括:
[0045]S21:在與服務(wù)端連接的通道上新建數(shù)據(jù)流,并通過所述數(shù)據(jù)流向所述服務(wù)端發(fā)送的調(diào)用請求。
[0046]本實(shí)施例的執(zhí)行主體為客戶端。
[0047]服務(wù)端可以具體包括接入層設(shè)備、應(yīng)用層設(shè)備、服務(wù)提供設(shè)備以及推送服務(wù)器。
[0048]服務(wù)端與客戶端連接的通道可以是spdy通道或者HTTP協(xié)議通道或者基于tcp/ip的套接字(socket)長連通道。其中,spdy是Google開發(fā)的基于傳輸控制協(xié)議(Transmiss1n Control Protocol, TCP)的應(yīng)用層協(xié)議。
[0049]數(shù)據(jù)流(stream)是一種虛擬通道,該虛擬通道位于服務(wù)端與客戶端連接的通道內(nèi),該數(shù)據(jù)流可以傳輸調(diào)用請求。具體的,數(shù)據(jù)流可以是雙向字節(jié)流,每個調(diào)用請求用一個數(shù)據(jù)流傳輸,不同調(diào)用請求用不同數(shù)據(jù)流傳輸,數(shù)據(jù)流可以在服務(wù)端與客戶端連接的通道中并行傳輸調(diào)用請求。
[0050]調(diào)用請求可以是設(shè)定的應(yīng)用程序編程接口(Applicat1n ProgrammingInterface, api)調(diào)用請求,例如在電子商務(wù)系統(tǒng)中,由電子商務(wù)服務(wù)提供者提供的進(jìn)行下單的業(yè)務(wù)操作的api。
[0051]S22:接收所述服務(wù)端對所述調(diào)用請求反饋的數(shù)據(jù)標(biāo)識信息,其中,所述服務(wù)端在向客戶端發(fā)送所述數(shù)據(jù)標(biāo)識信息后釋放所述數(shù)據(jù)流占用的資源。
[0052]其中,每個調(diào)用請求對應(yīng)唯一的數(shù)據(jù)標(biāo)識信息,相應(yīng)的,調(diào)用請求對應(yīng)的結(jié)果數(shù)據(jù)與該調(diào)用請求對應(yīng)相同的一個數(shù)據(jù)標(biāo)識信息。通過數(shù)據(jù)標(biāo)識信息,客戶端可以監(jiān)聽其發(fā)送的調(diào)用請求對應(yīng)的結(jié)果數(shù)據(jù)。
[0053]S23:根據(jù)所述數(shù)據(jù)標(biāo)識信息在所述通道上進(jìn)行監(jiān)聽,并獲取所述服務(wù)端通過所述通道發(fā)送的對所述調(diào)用請求進(jìn)行處理后得到的結(jié)果數(shù)據(jù)。
[0054]其中,服務(wù)端接收到調(diào)用請求后,可以從服務(wù)提供商獲取調(diào)用請求對應(yīng)的服務(wù),例如,在購物時,調(diào)用請求是獲取寶貝詳情的api請求,那么服務(wù)端可以獲取寶貝詳情的頁面作為結(jié)果數(shù)據(jù)返回給客戶端。
[0055]具體的,服務(wù)端在獲取結(jié)果數(shù)據(jù)后,采用主動推送的方式將結(jié)果數(shù)據(jù)發(fā)送給客戶端。服務(wù)端在推送結(jié)果數(shù)據(jù)時,還可以同時包含與調(diào)用請求對應(yīng)的數(shù)據(jù)標(biāo)識信息,客戶端通過該數(shù)據(jù)標(biāo)識信息可以查找到對應(yīng)的結(jié)果數(shù)據(jù)。
[0056]客戶端接收到數(shù)據(jù)標(biāo)識信息后,發(fā)起對通道的監(jiān)聽,監(jiān)測其發(fā)送的調(diào)用請求對應(yīng)的結(jié)果數(shù)據(jù)是否已經(jīng)返回,以此再做后續(xù)的業(yè)務(wù)邏輯。
[0057]客戶端主要監(jiān)聽返回的結(jié)果,返回的結(jié)果可以是返回數(shù)據(jù)標(biāo)識信息或者是異常結(jié)果(例如超時)信息。
[0058]進(jìn)一步,客戶端接收到服務(wù)端發(fā)送的結(jié)果數(shù)據(jù)后,根據(jù)所述結(jié)果數(shù)據(jù)進(jìn)行頁面展/Jn ο
[0059]本實(shí)施例通過在與服務(wù)端連接的通道上新建的數(shù)據(jù)流向服務(wù)端發(fā)送的調(diào)用請求,并根據(jù)接收到的數(shù)據(jù)標(biāo)識信息,其中,服務(wù)端在發(fā)送所述數(shù)據(jù)標(biāo)識信息后釋放所述數(shù)據(jù)流占用的資源,可以實(shí)現(xiàn)對服務(wù)端資源的及時釋放,避免一直保持造成的資源浪費(fèi),該釋放的資源可以用于為其他客戶端提供服務(wù),因此可以降低服務(wù)端資源浪費(fèi),提高服務(wù)端資源利用率,提升服務(wù)端吞吐量。
[0060]圖3是本申請另一實(shí)施例提出的異步調(diào)用方法的流程示意圖,圖4是圖3對應(yīng)的系統(tǒng)結(jié)構(gòu)不意圖。
[0061]參見圖4,該系統(tǒng)包括客戶端41和服務(wù)端42,服務(wù)端包括接入層設(shè)備421,應(yīng)用層設(shè)備422,服務(wù)提供設(shè)備423以及推送服務(wù)器424。接入層設(shè)備用wjas表示,wjas屬于接入層設(shè)備,是一個高性能的HTTP和反向代理服務(wù)器;應(yīng)用層設(shè)備用mtop表示,mtop屬于應(yīng)用層設(shè)備,是一種無線的網(wǎng)關(guān)java應(yīng)用;服務(wù)提供設(shè)備用server表示;推送服務(wù)器用pushserver 表不。
[0062]參見圖3,以調(diào)用請求是指定的應(yīng)用程序編程接口(Applicat1n ProgrammingInterface, api)的調(diào)用請求為例,本實(shí)施例的方法包括:
[0063]S301:客戶端向服務(wù)端的wjas發(fā)送api調(diào)用請求。
[0064]其中,客戶端與wjas可以預(yù)先建立連接通道,如圖4所示,該連接通道以spdy通道為例。
[0065]客戶端可以在spdy通道上新建數(shù)據(jù)流(stream),通過該數(shù)據(jù)流發(fā)送api調(diào)用請求。
[0066]進(jìn)一步的,spdy通道上建立的數(shù)據(jù)流可以是單向數(shù)據(jù)流,在客戶端關(guān)閉寫,支持服務(wù)端向客戶端寫數(shù)據(jù)。
[0067]S302:服務(wù)端的wjas在自身開啟推送模式時,分配數(shù)據(jù)標(biāo)識信息,并向所述mtop轉(zhuǎn)發(fā)api調(diào)用請求。
[0068]其中,wjas和mtop可以選擇開啟或關(guān)閉推送(push)模式,推送模式也可以稱為異步模式。
[0069]wjas和mtop之間的通道可以是spdy通道或者h(yuǎn)ttp通道,參見圖4,以http通道為例。
[0070]wjas發(fā)送給mtop的api調(diào)用請求中包含所述接入層設(shè)備wjas的標(biāo)識信息和所述數(shù)據(jù)標(biāo)識信息。
[0071 ] 標(biāo)識信息具體可以包括接入層設(shè)備wjas的IP地址、協(xié)議號和端口號。
[0072]數(shù)據(jù)標(biāo)識信息與api調(diào)用請求對應(yīng),每個api調(diào)用請求可以唯一對應(yīng)一個數(shù)據(jù)標(biāo)識信息,該api調(diào)用請求對應(yīng)的數(shù)據(jù)結(jié)果也同樣對應(yīng)該數(shù)據(jù)標(biāo)識信息。
[0073]S303:mtop接受到api調(diào)用請求后,檢查wjas與mtop是否開啟了 push模式,如開啟則將api調(diào)用請求加入請求隊列,并執(zhí)行S304。
[0074]其中,wjas向mtop發(fā)送api調(diào)用請求時,還可以在該api調(diào)用請求中包含wjas是否開啟push模式的標(biāo)識信息,以使得mtop獲知wjas是否開啟push模式。另外,mtop可以根據(jù)自身配置獲取自身是否開啟push模式。
[0075]S304:mtop向wjas發(fā)送用于標(biāo)識mtop已接受api調(diào)用請求的信息。
[0076]具體地,mtop可以向wjas返回http的statscode為202,該編碼202表示已接受api調(diào)用請求。mtop接受api調(diào)用請求后可以進(jìn)行對api調(diào)用請求進(jìn)行異步調(diào)用。
[0077]另一方面,當(dāng)wjas和mtop中的至少一個沒有開啟push模式時,可以執(zhí)行正常的http請求應(yīng)答模式。
[0078]正常的http請求應(yīng)答模式包括http輪循和spdy調(diào)用,參見圖5、6,分別示出了http輪循、spdy調(diào)用過程示意圖。
[0079]S305:wjas接收到用于標(biāo)識mtop已接受api調(diào)用請求的信息后,向客戶端發(fā)送與api調(diào)用請求對應(yīng)的數(shù)據(jù)標(biāo)識信息,并釋放數(shù)據(jù)流占用的資源。
[0080]S306:客戶端接收到數(shù)據(jù)標(biāo)識信息后,發(fā)起對spdy長連通道上數(shù)據(jù)的監(jiān)聽。
[0081]客戶端在數(shù)據(jù)監(jiān)聽時,如果監(jiān)聽到一個數(shù)據(jù)結(jié)果對應(yīng)的標(biāo)識是自身獲取的數(shù)據(jù)標(biāo)識信息,則可以獲知該數(shù)據(jù)結(jié)果是要發(fā)送給自身的,之后可以獲取該數(shù)據(jù)結(jié)果。
[0082]另一方面,mtop在S303接收到api調(diào)用請求并加入請求隊列后,可以根據(jù)該api調(diào)用請求進(jìn)行調(diào)用,獲取與數(shù)據(jù)標(biāo)識信息對應(yīng)的第一結(jié)果;mtop根據(jù)wjas的標(biāo)識信息,將第一結(jié)果和數(shù)據(jù)標(biāo)識信息發(fā)送給wjas ;wjas將第一結(jié)果和數(shù)據(jù)標(biāo)識信息,通過通道推送給客戶端。
[0083]具體的,該方法還可以包括:
[0084]S307:mtop從請求隊列中獲取api調(diào)用請求。
[0085]S308:mtop根據(jù)api調(diào)用請求進(jìn)行調(diào)用,獲取第一結(jié)果。
[0086]具體的,mtop可以根據(jù)api調(diào)用請求,向服務(wù)提供設(shè)備server發(fā)起異步調(diào)用,異步調(diào)用可以具體是High-Speed Service F