本發(fā)明涉及電通信技術(shù)領(lǐng)域,尤其涉及一種數(shù)據(jù)查詢的方法、裝置及系統(tǒng)。
背景技術(shù):
數(shù)據(jù)查詢是現(xiàn)代互聯(lián)網(wǎng)技術(shù)中最為基本的數(shù)據(jù)交互手段,在瀏覽器應(yīng)用及數(shù)據(jù)庫查詢系統(tǒng)中得到了廣泛的使用。典型的數(shù)據(jù)查詢過程涉及作為查詢發(fā)起方的客戶端和作為查詢響應(yīng)方的服務(wù)端兩側(cè)??蛻舳税l(fā)起一個查詢請求,將查詢條件(例如需要訪問的主機(jī)地址)添加到查詢請求中發(fā)送給服務(wù)端。服務(wù)端對查詢請求的內(nèi)容進(jìn)行解析,根據(jù)查詢條件進(jìn)行數(shù)據(jù)查詢,并通過返回查詢響應(yīng)的方式將查詢結(jié)果(例如網(wǎng)頁數(shù)據(jù))返回給客戶端。
在現(xiàn)有的數(shù)據(jù)查詢過程中發(fā)明人發(fā)現(xiàn):受網(wǎng)絡(luò)傳輸條件或者服務(wù)端負(fù)荷情況的影響,客戶端接收查詢響應(yīng)可能會發(fā)生延時。當(dāng)客戶端在短時間內(nèi)先后發(fā)起多次查詢請求時,在在先查詢請求對應(yīng)的查詢響應(yīng)返回之前用戶就進(jìn)行了下一次查詢操作。在此之后,當(dāng)客戶端先后返回了各個查詢響應(yīng)時,為保證查詢結(jié)果匹配于用戶當(dāng)前的查詢操作,現(xiàn)有技術(shù)僅會向用戶返回最后一次查詢操作對應(yīng)的查詢結(jié)果,由此導(dǎo)致在先查詢操作所請求的查詢結(jié)果無法輸出顯示。
技術(shù)實現(xiàn)要素:
本發(fā)明提供了一種數(shù)據(jù)查詢的方法、裝置及系統(tǒng),能夠解決客戶端無法輸出在先查詢結(jié)果的問題。
為解決上述問題,一方面,本發(fā)明提供了一種數(shù)據(jù)查詢的方法,包括:
為待發(fā)送的查詢請求生成不重復(fù)的請求標(biāo)記;
向服務(wù)端發(fā)送攜帶請求標(biāo)記的查詢請求;
接收服務(wù)端返回的查詢響應(yīng),查詢響應(yīng)中攜帶有查詢數(shù)據(jù),以及對應(yīng)查詢響應(yīng)的查詢請求所攜帶的請求標(biāo)記;
根據(jù)接收的請求標(biāo)記查找對應(yīng)查詢響應(yīng)的查詢請求;
通過彈出窗口對查詢請求中的查詢條件以及查詢數(shù)據(jù)進(jìn)行關(guān)聯(lián)顯示。
另一方面,本發(fā)明還提供了一種數(shù)據(jù)查詢的裝置,包括:
生成單元,用于為待發(fā)送的查詢請求生成不重復(fù)的請求標(biāo)記;
發(fā)送單元,用于向服務(wù)端發(fā)送攜帶請求標(biāo)記的查詢請求;
接收單元,用于接收服務(wù)端返回的查詢響應(yīng),查詢響應(yīng)中攜帶有查詢數(shù)據(jù),以及對應(yīng)查詢響應(yīng)的查詢請求所攜帶的請求標(biāo)記;
查找單元,用于根據(jù)接收的請求標(biāo)記查找對應(yīng)查詢響應(yīng)的查詢請求;
顯示單元,用于通過彈出窗口對查詢請求中的查詢條件以及查詢數(shù)據(jù)進(jìn)行關(guān)聯(lián)顯示。
再一方面,本發(fā)明還提供了一種數(shù)據(jù)查詢的系統(tǒng),包括:客戶端和服務(wù)端;
客戶端,用于為待發(fā)送的查詢請求生成不重復(fù)的請求標(biāo)記,向服務(wù)端發(fā)送攜帶請求標(biāo)記的查詢請求;
服務(wù)端,用于響應(yīng)查詢請求進(jìn)行數(shù)據(jù)查詢,解析查詢請求獲得請求標(biāo)記,將請求標(biāo)記及數(shù)據(jù)查詢獲得的查詢數(shù)據(jù)添加到對應(yīng)查詢請求的查詢響應(yīng)中返回給客戶端;
客戶端,還用于接收服務(wù)端返回的查詢響應(yīng),根據(jù)接收的請求標(biāo)記查找對應(yīng)查詢響應(yīng)的查詢請求,通過彈出窗口對查詢請求中的查詢條件以及查詢數(shù)據(jù)進(jìn)行關(guān)聯(lián)顯示。
本發(fā)明提供的數(shù)據(jù)查詢的方法、裝置及系統(tǒng),能夠在向服務(wù)端發(fā)送的查詢請求中添加一個唯一的請求標(biāo)記,由服務(wù)端將該請求標(biāo)記添加到對應(yīng)該查詢請求的查詢響應(yīng)中返回給客戶端。在接收到查詢響應(yīng)時,客戶端根據(jù)查詢響應(yīng)中的請求標(biāo)記查找對應(yīng)該查詢響應(yīng)的查詢請求,并通過彈窗的方式關(guān)聯(lián)顯示在先的查詢條件及查詢數(shù)據(jù)。與現(xiàn)有技術(shù)相比,本發(fā)明能夠在不影響用戶當(dāng)前查詢操作的同時對往次查詢結(jié)果予以顯示,保證查詢服務(wù)的完整和有效。
上述說明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段,而可依照說明書的內(nèi)容予以實施,并且為了讓本發(fā)明的上述和 其它目的、特征和優(yōu)點能夠更明顯易懂,以下特舉本發(fā)明的具體實施方式。
附圖說明
通過閱讀下文優(yōu)選實施方式的詳細(xì)描述,各種其他的優(yōu)點和益處對于本領(lǐng)域普通技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實施方式的目的,而并不認(rèn)為是對本發(fā)明的限制。而且在整個附圖中,用相同的參考符號表示相同的部件。在附圖中:
圖1示出了本發(fā)明實施例提供的一種數(shù)據(jù)查詢的方法流程圖;
圖2示出了本發(fā)明實施例提供的另一種數(shù)據(jù)查詢的方法流程圖;
圖3示出了本發(fā)明實施例提供的一種數(shù)據(jù)查詢的裝置的組成框圖;
圖4示出了本發(fā)明實施例提供的另一種數(shù)據(jù)查詢的裝置的組成框圖;
圖5示出了本發(fā)明實施例提供的一種數(shù)據(jù)查詢的系統(tǒng)框圖。
具體實施方式
下面將參照附圖更詳細(xì)地描述本公開的示例性實施例。雖然附圖中顯示了本公開的示例性實施例,然而應(yīng)當(dāng)理解,可以以各種形式實現(xiàn)本公開而不應(yīng)被這里闡述的實施例所限制。相反,提供這些實施例是為了能夠更透徹地理解本公開,并且能夠?qū)⒈竟_的范圍完整的傳達(dá)給本領(lǐng)域的技術(shù)人員。
本發(fā)明實施例提供了一種數(shù)據(jù)查詢的方法,如圖1所示,該方法包括:
101、為待發(fā)送的查詢請求生成不重復(fù)的請求標(biāo)記。
客戶端在每次發(fā)起查詢請求前,均為待發(fā)送的查詢請求生成一個請求標(biāo)記,該請求標(biāo)記不重復(fù)生成也不重復(fù)使用,由此保證每個查詢請求的請求標(biāo)記唯一有效。
實際應(yīng)用中,客戶端可以在發(fā)送查詢請求前,臨時生成一個請求標(biāo)記,也可以預(yù)先生成多個不重復(fù)的請求標(biāo)記,將其預(yù)存在標(biāo)記列表或標(biāo)記隊列中,當(dāng)發(fā)起查詢請求時從中選取一個請求標(biāo)記分配給待發(fā)送的查詢請求。本實施例不對生成請求標(biāo)記的時機(jī)進(jìn)行限制。
102、向服務(wù)端發(fā)送攜帶請求標(biāo)記的查詢請求。
客戶端將生成的請求標(biāo)記添加到查詢請求的預(yù)設(shè)字段中,并向服務(wù)端發(fā)送攜帶請求標(biāo)記的查詢請求。實際應(yīng)用中,可以在客戶端與服務(wù)端兩側(cè) 配置相同的私有協(xié)議,指定客戶端添加請求標(biāo)記的具體字段位置,以及服務(wù)端解析請求標(biāo)記的具體字段位置。而對于無法通過改寫協(xié)議指定字段位置的情況,也可以將請求標(biāo)記脫離于查詢請求進(jìn)行單獨發(fā)送。但是為保證請求標(biāo)記與查詢請求之間的強(qiáng)關(guān)聯(lián)性,需要對發(fā)送請求標(biāo)記和查詢請求之間的時間間隔進(jìn)行嚴(yán)格限制。較為理想的,該時間間隔應(yīng)當(dāng)遠(yuǎn)小于人為觸發(fā)兩次查詢請求之間可能存在的最小時間間隔。
需要說明的是,本實施例中所述的私有協(xié)議是指傳輸層使用的協(xié)議類型,包括但不限于是傳輸控制協(xié)議(Transmission Control Protocol,簡稱TCP)及用戶數(shù)據(jù)報協(xié)議(User Datagram Protocol,簡稱UDP),本實施例并不對應(yīng)用層使用的諸如超文本傳輸協(xié)議(Hypertext Transfer Protocol,簡稱HTTP)等公有協(xié)議進(jìn)行排斥。
103、接收服務(wù)端返回的查詢響應(yīng)。
服務(wù)端在接收到查詢請求后,從中解析出查詢條件信息,并從指定的字段位置中解析出客戶端添加的請求標(biāo)記。然后根據(jù)查詢條件信息查找對應(yīng)的查詢數(shù)據(jù),并將查詢數(shù)據(jù)作為查詢結(jié)果添加到查詢響應(yīng)中。區(qū)別于現(xiàn)有技術(shù)的是,服務(wù)端還會將解析出的請求標(biāo)記添加到查詢響應(yīng)中,以便客戶端后續(xù)識別查詢響應(yīng)之用。
與步驟102類似的,服務(wù)端添加請求標(biāo)記的字段位置也可以由私有協(xié)議自由指定。在一種較為簡便的實現(xiàn)方式中,可以將客戶端及服務(wù)端添加請求標(biāo)記的字段位置指定為同一位置。
104、根據(jù)接收的請求標(biāo)記查找對應(yīng)查詢響應(yīng)的查詢請求。
為實現(xiàn)對請求標(biāo)記的比對,客戶端需要按照發(fā)起時序?qū)σ寻l(fā)送的查詢請求進(jìn)行緩存。在接收到查詢響應(yīng)時,客戶端從查詢響應(yīng)中解析出查詢數(shù)據(jù)以及服務(wù)端添加的請求標(biāo)記,并對緩存的查詢請求逐條解析以獲得其中的請求標(biāo)記。然后在從緩存中解析出的請求標(biāo)記中查找接收到的請求標(biāo)記,并將該接收到的請求標(biāo)記所對應(yīng)的查詢請求確定為作為本步驟查找對象的查詢請求。通過請求標(biāo)記,客戶端可以找出相互關(guān)聯(lián)的查詢請求和查詢響應(yīng)。
105、通過彈出窗口對查詢請求中的查詢條件以及查詢數(shù)據(jù)進(jìn)行關(guān)聯(lián)顯 示。
在找出與查詢響應(yīng)對應(yīng)的查詢請求后,客戶端從查詢請求中解析出查詢條件,例如查詢字符串、查詢字段等。然后在當(dāng)前顯示的查詢界面中顯示一個彈出窗口,對查詢請求中的查詢數(shù)據(jù)以及查詢請求中的查詢條件進(jìn)行關(guān)聯(lián)顯示。在本實施例的一種實現(xiàn)方式中,如果客戶端可以與數(shù)據(jù)查詢軟件或者瀏覽器的開發(fā)方進(jìn)行頁面定制,那么可以將彈出窗口設(shè)置在查詢頁面之中。具體而言,對于超文本標(biāo)記語言(Hypertext Markup Language,簡稱HTML)頁面而言,可以通過定制的形式將彈出窗口的程序代碼植入到頁面源代碼中,以HTML頁面內(nèi)嵌的形式顯示彈出窗口。而在本實施例的另一種實現(xiàn)方式中,如若無法進(jìn)行頁面定制,則可以通過在頁面圖層之上覆蓋新圖層的方式,顯示Flash類型的彈出窗口。對于后者實現(xiàn)方式彈出窗口的位置不受原頁面尺寸范圍的限制。
本實施例中所述的關(guān)聯(lián)顯示是指通過不同的可視化顯示形式對查詢條件和查詢數(shù)據(jù)進(jìn)行標(biāo)注,以使得用戶可以通過該種顯示形式辨認(rèn)出哪個查詢條件對應(yīng)哪個查詢數(shù)據(jù)。一般可以采用菜單列表的形式進(jìn)行顯示。其中,列表縱向至少包含“查詢條件”和“查詢數(shù)據(jù)”兩個字段,當(dāng)然也可以包含查詢操作序號等其他輔助字段;列表橫向包含與接收到的查詢響應(yīng)數(shù)量相同的數(shù)據(jù)行,每一行用于顯示一對“查詢條件+查詢數(shù)據(jù)”,通常數(shù)據(jù)行的數(shù)量不大于已發(fā)送的查詢請求的數(shù)量。此外,客戶端可以按照預(yù)設(shè)規(guī)則對數(shù)據(jù)行的排列順序進(jìn)行調(diào)整,預(yù)設(shè)規(guī)則包括但不限于是:發(fā)起查詢請求的先后順序、接收查詢響應(yīng)的先后順序。
實際應(yīng)用中,查詢數(shù)據(jù)的數(shù)據(jù)量通常較大(例如文檔數(shù)據(jù)),或者查詢數(shù)據(jù)無法通過文本形式進(jìn)行顯示(例如網(wǎng)頁鏈接、圖片等),這種情況下,客戶端可以在“查詢數(shù)據(jù)”字段中僅顯示查詢數(shù)據(jù)的超鏈接地址或鏈接控件等操作對象。當(dāng)用戶點擊該操作對象時客戶端跳轉(zhuǎn)到新頁面對查詢數(shù)據(jù)的具體內(nèi)容予以展示。
對于彈出窗口的尺寸和顯示位置,以不影響用戶對當(dāng)前頁面的使用為原則進(jìn)行設(shè)置。較為實用的實現(xiàn)方式為,將長寬分別不超過頁面長寬二分之一的彈出窗口顯示于頁面的左/右下角。此外,對于具有固定布局結(jié)構(gòu)頁 面,例如專利檢索頁面或者定制的數(shù)據(jù)庫查詢頁面,客戶端也可以調(diào)取頁面源代碼,通過對層疊樣式表(Cascading Style Sheets,簡稱CSS)文件的解析自動識別頁面中的空白區(qū)域,并依據(jù)空白區(qū)域的大小將彈出窗口動態(tài)設(shè)置于該區(qū)域中。本實施例所述的空白區(qū)域是指頁面中不顯示文字、圖片等數(shù)據(jù)內(nèi)容,并且不包含操作控件的尺寸較為規(guī)整的頁面位置。
而在本實施例的另一種實現(xiàn)方式中,為進(jìn)一步減少彈出窗口對用戶操作的影響,客戶端還可以僅顯示一個提示對話框,提示用戶接收到了新的查詢結(jié)果,如若用戶點擊該對話框,則客戶端顯示彈出窗口。實際應(yīng)用中,適宜設(shè)置對話框的位置包括但不限于是:頁面邊角位置、頁面中央、工具欄中以及信息提示欄中。
本實施例中,客戶端可以在每接收到一個查詢響應(yīng)時進(jìn)行一次彈窗顯示,也可以在接收到部分或全部查詢響應(yīng)時批量進(jìn)行彈窗顯示。其中,接收到部分查詢響應(yīng)的情況包括:1、接收到不大于查詢請求數(shù)量的任一預(yù)設(shè)數(shù)量的查詢響應(yīng);2、在一個預(yù)設(shè)的時段周期內(nèi)接收到的查詢響應(yīng);3、接收來自同一主機(jī)的查詢響應(yīng);4、接收屬于同一查詢主題的查詢響應(yīng)。
本實施例提供的方法適用于實際生活中的所有數(shù)據(jù)查詢場景,這些場景包括但不限于是:通過瀏覽器請求網(wǎng)頁內(nèi)容、通過APP進(jìn)行垂直搜索以及在私有網(wǎng)絡(luò)中進(jìn)行數(shù)據(jù)庫查詢等。下面通過一個簡單的示例對現(xiàn)有技術(shù)和圖1方法進(jìn)行比較說明:
假設(shè)用戶向垂直搜索服務(wù)器發(fā)送查詢請求1,請求查詢16款奧迪A4L全系車型的價格H,由于此時服務(wù)器負(fù)載較高,因此沒有對查詢請求1做出及時響應(yīng);此后用戶又向服務(wù)器發(fā)送查詢請求2,請求查詢15款奔馳C200全系車型的價格L。在客戶端發(fā)送查詢請求2之后,服務(wù)器先后對查詢請求1和查詢請求2做出響應(yīng),將價格H和價格L返回給客戶端。在現(xiàn)有技術(shù)中,客戶端在接收到查詢響應(yīng)1后,判斷其不為用戶最后一次查詢操作的響應(yīng),因此不輸出價格H。而當(dāng)接收到查詢響應(yīng)2后,由于該響應(yīng)對應(yīng)于用戶最后一次的查詢操作,因此客戶端輸出價格L。而在圖1所示方法中,客戶端在發(fā)送的查詢請求1中添加了請求標(biāo)記“110”,在發(fā)送的查詢請求2中添加了請求標(biāo)記“203”。服務(wù)器在響應(yīng)查詢請求1時,將其中的請求標(biāo) 記“110”添加到查詢響應(yīng)1中,連同價格H一同返回給客戶端??蛻舳嗽诮邮盏讲樵冺憫?yīng)1后,根據(jù)其中的請求標(biāo)記“110”查找到查詢請求1,然后通過彈出窗口顯示“16款奧迪A4L全系車型價格”+“價格H”的響應(yīng)結(jié)果;而后當(dāng)接收到查詢響應(yīng)2時,客戶端通過請求標(biāo)記“203”查找到查詢請求2,并在彈出窗口中進(jìn)一步顯示“15款奔馳C200全系車型價格”+“價格L”的響應(yīng)結(jié)果。
通過上述示例可以看出:現(xiàn)有技術(shù)中,客戶端僅輸出了最后一次查詢操作對應(yīng)的查詢結(jié)果,雖然該查詢結(jié)果是用戶在進(jìn)行第二次查詢操作之后的所期待的內(nèi)容,但是卻犧牲了第一次查詢操作對應(yīng)的查詢結(jié)果。相對而言,圖1所示方法則能夠?qū)v次查詢操作對應(yīng)的查詢結(jié)果,按照查詢響應(yīng)返回的先后順序進(jìn)行輸出。無論用戶進(jìn)行了幾次查詢操作,客戶端均可以將所有的查詢結(jié)果反饋給用戶。
進(jìn)一步的,作為對圖1所示方法的細(xì)化,本發(fā)明實施例還提供了一種數(shù)據(jù)查詢的方法,如圖2所示,該方法包括:
201、為待發(fā)送的查詢請求生成不重復(fù)的請求標(biāo)記。
本實施例中,能夠作為請求標(biāo)記使用的參數(shù)可以是偽隨機(jī)數(shù)、信息摘要算法(Message-Digest Algorithm 5,簡稱MD5)值或者時間戳。下面分別對著三種參數(shù)的使用進(jìn)行介紹:
1、偽隨機(jī)數(shù)
客戶端側(cè)植入有一個偽隨機(jī)數(shù)發(fā)生函數(shù),該函數(shù)本身的特點在于每次生成的偽隨機(jī)數(shù)互相不重復(fù)。在進(jìn)行數(shù)據(jù)查詢時,客戶端可以單起一個線程監(jiān)控瀏覽器等程序的運行狀態(tài)。當(dāng)產(chǎn)生查詢請求時,該線程通過hook函數(shù)將發(fā)送動作截獲,并跳轉(zhuǎn)調(diào)用偽隨機(jī)數(shù)發(fā)生函數(shù)生成偽隨機(jī)數(shù)。
在本實施例的一種實現(xiàn)方式中,當(dāng)使用C語言進(jìn)行編譯時,可以直接使用C語言編譯器提供的、基于ansi標(biāo)準(zhǔn)的偽隨機(jī)數(shù)發(fā)生器函數(shù)。這個函數(shù)由srand()和rand()兩個子函數(shù)組成。在生成偽隨機(jī)數(shù)時,首先為srand()提供一個名為“種子值”、類型為unsigned int的初始值,該初始值的取值范圍為0~65535。通常情況下可以使用快速計數(shù)寄存器或移位寄存器隨機(jī)分配該種子值。然后調(diào)用rand(),根據(jù)srand()的種子值返回一個偽隨機(jī)數(shù),該 偽隨機(jī)數(shù)是在0~32767的取值范圍內(nèi)隨機(jī)選擇的。當(dāng)需要生成下一個偽隨機(jī)數(shù)時重復(fù)調(diào)用rand(),仍從上述取值范圍內(nèi)隨機(jī)選擇出一個新的偽隨機(jī)數(shù)。由于rand()理論上具有不重復(fù)選擇的機(jī)制(即多次調(diào)用rand()選擇出的偽隨機(jī)數(shù)雖然都落于上述范圍內(nèi),但是相互之間不會重復(fù)),因此本實施例中可以基于一個種子值生成多個不同的偽隨機(jī)數(shù)。
但是在實際應(yīng)用中,上述不重復(fù)選擇的機(jī)制并不是一個全概率事件,即選擇的多個偽隨機(jī)數(shù)存在較小概率重復(fù)的可能(這也是“偽隨機(jī)數(shù)”名稱的由來)。特別是隨著生成偽隨機(jī)數(shù)數(shù)量的不斷增多,后續(xù)選擇偽隨機(jī)數(shù)的取值范圍將會越來越小,因此重復(fù)選擇偽隨機(jī)數(shù)的概率就會越來越大。為防止出現(xiàn)重復(fù)的偽隨機(jī)數(shù),在本實施例的一種改進(jìn)方案中,可以根據(jù)預(yù)設(shè)的生成次數(shù)更換種子值。例如在通過一個種子值生成了1000個偽隨機(jī)數(shù)后,重新為srand()隨機(jī)分配一個新的種子值,并由rand()根據(jù)新的種子值繼續(xù)生成偽隨機(jī)數(shù)。種子值的隨機(jī)改變可以進(jìn)一步提高rand()的隨機(jī)化程度,由此降低偽隨機(jī)數(shù)重復(fù)的概率。
實際應(yīng)用中,可以根據(jù)偽隨機(jī)數(shù)的取值范圍設(shè)定預(yù)設(shè)的生成次數(shù),例如可以將生成次數(shù)設(shè)定為32768/2=16384,或者32768/4=8192。當(dāng)然生成次數(shù)也可以是一個固定值,例如上述示例中的1000次,本實施例不對預(yù)設(shè)生成次數(shù)的具體數(shù)值進(jìn)行限制。
2、MD5值
本實施例中,還可以對查詢請求中的查詢條件進(jìn)行MD5運算,將獲得的MD5值作為請求標(biāo)記使用。由于不同查詢請求的查詢條件互不相同,因此計算出來的MD5值不會重復(fù)。
實際應(yīng)用中,對于請求網(wǎng)頁內(nèi)容的查詢請求,可以對其中攜帶的統(tǒng)一資源定位符(Uniform Resource Locator,簡稱URL)做MD5運算,例如對URL“http://localhost:7777/user.do?name=uu&sex=male”做MD5運算;也可以僅對URL中的查詢字符串進(jìn)行MD5運算,例如對上述URL中的“name=uu&sex=male”做MD5運算。對于數(shù)據(jù)庫查詢請求,則可以將其中的查詢字段進(jìn)行MD5運算。本實施例不對MD5運算的具體對象進(jìn)行限制。
3、時間戳
本實施例中還可以根據(jù)查詢請求產(chǎn)生的時間生成時間戳,將時間戳用作為請求標(biāo)記。通常,基于用戶操作產(chǎn)生的查詢請求的產(chǎn)生時間互不相同,或者說用戶一般無法在同一時刻上同時發(fā)起多次查詢請求。因此查詢請求的產(chǎn)生時間是唯一的。實際應(yīng)用中,客戶端可以在生成查詢請求時請求獲取當(dāng)前的系統(tǒng)時鐘,將獲取的系統(tǒng)時刻值作為時間戳使用。此外,客戶端也可以在啟動后通過一個獨立的線程進(jìn)行計數(shù),在生成查詢請求時,讀取當(dāng)前的計數(shù)值作為相對時間戳使用。
需要說明的是,實際應(yīng)用中可能存在由應(yīng)用進(jìn)程同時觸發(fā)多個后臺查詢請求的情況,即存在非人為觸發(fā)的并發(fā)查詢請求。由于并發(fā)查詢請求的時間戳相同,因此無法用作請求標(biāo)記。對此這種情況,客戶端可以將時間戳與其他能夠體現(xiàn)查詢請求的相對唯一性的信息進(jìn)行組合,作為請求標(biāo)記使用。示例性的,可用作請求標(biāo)記的信息組合可以為“時間戳+進(jìn)程編號/名稱”或者“時間戳+主機(jī)域名”。
以上對偽隨機(jī)數(shù)、MD5值以及時間戳用作請求標(biāo)記的實現(xiàn)方式進(jìn)行了介紹。實際應(yīng)用中,上述三種參數(shù)可以單獨或相互組合作為請求標(biāo)記使用。
202、將請求標(biāo)記添加到查詢請求中。
目前,數(shù)據(jù)查詢技術(shù)使用的最為廣泛的應(yīng)用層協(xié)議為HTTP協(xié)議,本實施例將以HTTP協(xié)議為例進(jìn)行說明。
HTTP請求包含請求行、頭字段(head)和體字段(body)三部分。其中,請求行用以記錄請求類型、訪問資源以及HTTP版本等信息,頭字段用以說明服務(wù)器使用的附加信息,體字段中則可以添加任意的數(shù)據(jù)信息。本實施例中客戶端可以將請求標(biāo)記添加到體字段中。此外,由于頭字段中的內(nèi)容也可以進(jìn)行適當(dāng)修改,因此實際應(yīng)用中將請求標(biāo)記添加到頭字段中也是可行的。
203、向服務(wù)端發(fā)送攜帶請求標(biāo)記的查詢請求。
204、對已發(fā)送的查詢請求進(jìn)行緩存。
查詢請求在被發(fā)送到服務(wù)端后,需要保存在客戶端本地,用于后續(xù)比對請求標(biāo)記之用。本實施例中,客戶端按照發(fā)送的先后順序?qū)Σ煌牟樵冋埱筮M(jìn)行緩存。在一種可行的實現(xiàn)方式中,客戶端可以將多個查詢請求順 序保存于堆棧中。堆棧具有“先進(jìn)后出”的特性,最早發(fā)送的查詢請求存放于棧底,最晚發(fā)送的查詢請求則存放于棧頂。在讀取查詢請求時,客戶端從棧頂保存的查詢請求開始,依次讀取堆棧中的各個查詢請求,直至讀取到棧底的查詢請求為止。而在本實施例的另一種實現(xiàn)方式中,客戶端還可以將多個查詢請求順序保存于隊列中。隊列具有“先進(jìn)先出”的特性,客戶端從隊列的首部存儲查詢請求,從隊列的尾部讀取查詢請求。
存放于堆棧和隊列區(qū)別在于:對于堆棧而言,客戶端讀取查詢請求的順序和存儲查詢請求的順序相反,或者說客戶端讀取查詢請求的順序和發(fā)送查詢請求的順序相反,即最先發(fā)送的查詢請求被最后讀??;而對于隊列而言,客戶端讀取查詢請求的順序和存儲查詢請求的順序一致,或者說客戶端讀取查詢請求的順序和發(fā)送查詢請求的順序一致,即最先發(fā)送的查詢請求被最先讀取。
上述讀取查詢請求的順序的差異會影響后續(xù)比對請求標(biāo)記的順序,但是,本實施例中客戶端是將接收到的請求標(biāo)記與所有保存的查詢請求中的請求標(biāo)記分別進(jìn)行比對,因此比對請求標(biāo)記的先后順序不會對方案實現(xiàn)的結(jié)果造成影響,實際應(yīng)用中可以選擇使用堆?;蜿犃羞M(jìn)行查詢請求的保存。
205、接收服務(wù)端返回的查詢響應(yīng)。
對于單個客戶端而言,通過對偽隨機(jī)數(shù)、MD5值等參數(shù)的使用可以保證各個查詢請求中的請求標(biāo)記不重復(fù)。但是服務(wù)端會與大量的客戶端進(jìn)行交互,各個客戶端之間生成請求標(biāo)記的過程是相互獨立的,無法保證不同客戶端的查詢請求中的請求標(biāo)記沒有重復(fù)。在本實施例中,沒有必要保證不同客戶端生成的請求標(biāo)記一定不同,服務(wù)端無需對不同客戶端的請求標(biāo)記進(jìn)行區(qū)分,甚至無需關(guān)注請求標(biāo)記的具體內(nèi)容,只需要將查詢請求中解析出的請求標(biāo)記“原封不動”的添加到對應(yīng)該查詢請求的查詢響應(yīng)中即可。
206、根據(jù)接收的請求標(biāo)記查找對應(yīng)查詢響應(yīng)的查詢請求。
受網(wǎng)絡(luò)時延或服務(wù)端負(fù)載狀況影響,查詢響應(yīng)返回順序可能會被打亂。但是客戶端無需判斷也無法判斷接收的查詢響應(yīng)對應(yīng)于哪一個查詢請求,在每接收到一個查詢響應(yīng)之后,客戶端讀取一次緩存,將緩存的所有查詢請求全部讀出,并從各個查詢請求中分別解析出請求標(biāo)記,解析出的請求 標(biāo)記的數(shù)量與緩存的查詢請求數(shù)量相等。在獲得各個查詢請求的請求標(biāo)記后,客戶端從解析的請求標(biāo)記中查找與接收的請求標(biāo)記相同的請求標(biāo)記,然后獲取攜帶查找到的請求標(biāo)記的查詢請求。由此獲得與接收的查詢響應(yīng)對應(yīng)的查詢請求。
示例性的,某用戶先后發(fā)起了A、B、C三次查詢請求,客戶端為查詢請求A、B、C生成的請求標(biāo)記分別為a、b、c。在發(fā)送完查詢請求C之后,客戶端首先接收到了對應(yīng)查詢請求B的查詢響應(yīng)2,其中攜帶有請求標(biāo)記b??蛻舳藦木彺嬷凶x取查詢請求A、B、C,并解析出請求標(biāo)記a、b、c。然后客戶端將接收的查詢響應(yīng)2中的請求標(biāo)記b與解析出的三個請求標(biāo)記進(jìn)行比對,確定查詢響應(yīng)2為對應(yīng)查詢請求B的查詢響應(yīng)。
上述實現(xiàn)方式中,客戶端每接收到一個查詢響應(yīng)后都需要對所有緩存的查詢請求進(jìn)行讀取和標(biāo)記解析,實際應(yīng)用中當(dāng)緩存的請求數(shù)量較大時,這種實現(xiàn)的方式會延長查詢結(jié)果的反饋時間。為提高查詢結(jié)果的反饋速度,在本實施例的一種改進(jìn)方案中,客戶端在保存查詢請求時,可以直接將查詢請求對應(yīng)的請求標(biāo)記作為該查詢請求的序號或標(biāo)識一同進(jìn)行保存,例如以映射關(guān)系表的形式將請求標(biāo)記和對應(yīng)的查詢請求保存在同一數(shù)據(jù)行中。當(dāng)接收到查詢響應(yīng)時,客戶端可以直接以接收到的請求標(biāo)記作為索引,定向讀取對應(yīng)的查詢請求。這種改進(jìn)方式無需客戶端讀取全部的查詢請求,可以大大降低對緩存I/O口的調(diào)用次數(shù),并且不需要對查詢請求進(jìn)行解析,可以減少CPU處理資源的消耗。由于降低了I/O口的調(diào)用次數(shù)及CPU處理資源的消耗,因此本方式可以大大縮短查詢結(jié)果的反饋時間。特別是當(dāng)反饋的查詢響應(yīng)的數(shù)量較多時,這種方式的優(yōu)勢更為明顯。
207、在不遮擋查詢界面的操作控件的位置上顯示彈出窗口。
對于在頁面中植入彈出窗口的方式,彈出窗口的位置和尺寸通過與瀏覽器開發(fā)者或其他應(yīng)用開發(fā)者協(xié)商確定。對于通過覆蓋圖層顯示彈出窗口的方式,則可以根據(jù)頁面布局慣例自行確定窗口位置和尺寸,例如在頁面右下角顯示彈出窗口。
進(jìn)一步的,對于后者實現(xiàn)方式,當(dāng)彈出窗口不可避免的遮擋了原頁面中的部分內(nèi)容時,還可以考慮調(diào)整彈出窗口的透明度,以方便用戶對原頁 面內(nèi)容的查看。
208、通過彈出窗口對查詢請求中的查詢條件以及查詢數(shù)據(jù)進(jìn)行關(guān)聯(lián)顯示。
209、在彈出窗口顯示了預(yù)設(shè)時長后,隱藏彈出窗口。
作為圖2所示流程的一個可選方案,考慮到用戶可能不需要對接收到的查詢結(jié)果立即進(jìn)行查看,這種情況下,彈出窗口可以在顯示了預(yù)設(shè)時長后自動隱藏或關(guān)閉,由此避免因頻繁關(guān)閉彈出窗口影響用戶對客戶端的正常使用。
進(jìn)一步的,作為對圖1或圖2所示方法的實現(xiàn),本發(fā)明另一實施例還提供了一種數(shù)據(jù)查詢的裝置。本裝置實施例與前述方法實施例對應(yīng),能夠?qū)崿F(xiàn)前述方法實施例中的全部內(nèi)容。為便于閱讀,本裝置實施例僅對前述方法實施例中的內(nèi)容進(jìn)行概要性描述,不對方法實施例中的細(xì)節(jié)內(nèi)容進(jìn)行逐一贅述。如圖3所示,該裝置包括:生成單元31、發(fā)送單元32、接收單元33、查找單元34以及顯示單元35。其中,
生成單元31,用于為待發(fā)送的查詢請求生成不重復(fù)的請求標(biāo)記;
發(fā)送單元32,用于向服務(wù)端發(fā)送攜帶請求標(biāo)記的查詢請求;
接收單元33,用于接收服務(wù)端返回的查詢響應(yīng),查詢響應(yīng)中攜帶有查詢數(shù)據(jù),以及對應(yīng)查詢響應(yīng)的查詢請求所攜帶的請求標(biāo)記;
查找單元34,用于根據(jù)接收的請求標(biāo)記查找對應(yīng)查詢響應(yīng)的查詢請求;
顯示單元35,用于通過彈出窗口對查詢請求中的查詢條件以及查詢數(shù)據(jù)進(jìn)行關(guān)聯(lián)顯示。
進(jìn)一步的,如圖4所示,生成單元31,包括:
第一生成模塊311,用于通過偽隨機(jī)數(shù)發(fā)生函數(shù)生成偽隨機(jī)數(shù);
第二生成模塊312,用于對查詢請求中的查詢條件進(jìn)行信息摘要算法MD5計算,生成MD5值;
第三生成模塊313,用于根據(jù)查詢請求產(chǎn)生的時間生成時間戳。
進(jìn)一步的,如圖4所示,該裝置進(jìn)一步包括存儲單元36,用于在接收服務(wù)端返回的查詢響應(yīng)之前,對已發(fā)送的查詢請求進(jìn)行緩存;
查找單元34,用于:
解析緩存的查詢請求中的請求標(biāo)記;
從解析的請求標(biāo)記中查找與接收的請求標(biāo)記相同的請求標(biāo)記;
獲取攜帶查找到的請求標(biāo)記的查詢請求。
進(jìn)一步的,顯示單元35,用于在通過彈出窗口對查詢請求中的查詢條件以及查詢數(shù)據(jù)進(jìn)行關(guān)聯(lián)顯示之前,在不遮擋查詢界面的操作控件的位置上顯示彈出窗口。
進(jìn)一步的,顯示單元35,還用于在通過彈出窗口對查詢請求中的查詢條件以及查詢數(shù)據(jù)進(jìn)行關(guān)聯(lián)顯示之后,在彈出窗口顯示了預(yù)設(shè)時長后,隱藏彈出窗口。
所述數(shù)據(jù)查詢的裝置包括處理器和存儲器,上述生成單元31、發(fā)送單元32、接收單元33、查找單元34以及顯示單元35等均作為程序單元存儲在存儲器中,由處理器執(zhí)行存儲在存儲器中的上述程序單元來實現(xiàn)相應(yīng)的功能。
處理器中包含內(nèi)核,由內(nèi)核去存儲器中調(diào)取相應(yīng)的程序單元。內(nèi)核可以設(shè)置一個或以上,通過調(diào)整內(nèi)核參數(shù)輸出歷次查詢操作對應(yīng)的查詢結(jié)果。
存儲器可能包括計算機(jī)可讀介質(zhì)中的非永久性存儲器,隨機(jī)存取存儲器(RAM)和/或非易失性內(nèi)存等形式,如只讀存儲器(ROM)或閃存(flash RAM),存儲器包括至少一個存儲芯片。
本申請還提供了一種計算機(jī)程序產(chǎn)品,當(dāng)在數(shù)據(jù)處理設(shè)備上執(zhí)行時,適于執(zhí)行初始化有如下方法步驟的程序代碼:為待發(fā)送的查詢請求生成不重復(fù)的請求標(biāo)記;向服務(wù)端發(fā)送攜帶請求標(biāo)記的查詢請求;接收服務(wù)端返回的查詢響應(yīng),查詢響應(yīng)中攜帶有查詢數(shù)據(jù),以及對應(yīng)查詢響應(yīng)的查詢請求所攜帶的請求標(biāo)記;根據(jù)接收的請求標(biāo)記查找對應(yīng)查詢響應(yīng)的查詢請求;通過彈出窗口對查詢請求中的查詢條件以及查詢數(shù)據(jù)進(jìn)行關(guān)聯(lián)顯示。
進(jìn)一步的,作為對圖1或圖2所示方法的實現(xiàn),本發(fā)明另一實施例還提供了一種數(shù)據(jù)查詢的系統(tǒng)。本系統(tǒng)實施例與前述方法實施例對應(yīng),能夠?qū)崿F(xiàn)前述方法實施例中的全部內(nèi)容。為便于閱讀,本系統(tǒng)實施例僅對前述方法實施例中的內(nèi)容進(jìn)行概要性描述,不對方法實施例中的細(xì)節(jié)內(nèi)容進(jìn)行逐一贅述。如圖5所示,該系統(tǒng)包括:客戶端51和服務(wù)端52;
客戶端51,用于為待發(fā)送的查詢請求生成不重復(fù)的請求標(biāo)記,向服務(wù)端52發(fā)送攜帶請求標(biāo)記的查詢請求;
服務(wù)端52,用于響應(yīng)查詢請求進(jìn)行數(shù)據(jù)查詢,解析查詢請求獲得請求標(biāo)記,將請求標(biāo)記及數(shù)據(jù)查詢獲得的查詢數(shù)據(jù)添加到對應(yīng)查詢請求的查詢響應(yīng)中返回給客戶端51;
客戶端51,還用于接收服務(wù)端52返回的查詢響應(yīng),根據(jù)接收的請求標(biāo)記查找對應(yīng)查詢響應(yīng)的查詢請求,通過彈出窗口對查詢請求中的查詢條件以及查詢數(shù)據(jù)進(jìn)行關(guān)聯(lián)顯示。
本發(fā)明實施例提供的數(shù)據(jù)查詢的裝置及系統(tǒng),能夠在向服務(wù)端發(fā)送的查詢請求中添加一個唯一的請求標(biāo)記,由服務(wù)端將該請求標(biāo)記添加到對應(yīng)該查詢請求的查詢響應(yīng)中返回給客戶端。在接收到查詢響應(yīng)時,客戶端根據(jù)查詢響應(yīng)中的請求標(biāo)記查找對應(yīng)該查詢響應(yīng)的查詢請求,并通過彈窗的方式關(guān)聯(lián)顯示在先的查詢條件及查詢數(shù)據(jù)。與現(xiàn)有技術(shù)相比,本發(fā)明實施例能夠在不影響用戶當(dāng)前查詢操作的同時對往次查詢結(jié)果予以顯示,保證查詢服務(wù)的完整和有效。
本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本申請的實施例可提供為方法、系統(tǒng)、或計算機(jī)程序產(chǎn)品。因此,本申請可采用完全硬件實施例、完全軟件實施例、或結(jié)合軟件和硬件方面的實施例的形式。而且,本申請可采用在一個或多個其中包含有計算機(jī)可用程序代碼的計算機(jī)可用存儲介質(zhì)(包括但不限于磁盤存儲器、CD-ROM、光學(xué)存儲器等)上實施的計算機(jī)程序產(chǎn)品的形式。
本申請是參照根據(jù)本申請實施例的方法、設(shè)備(系統(tǒng))、和計算機(jī)程序產(chǎn)品的流程圖和/或方框圖來描述的。應(yīng)理解可由計算機(jī)程序指令實現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計算機(jī)程序指令到通用計算機(jī)、專用計算機(jī)、嵌入式處理機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個機(jī)器,使得通過計算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。
這些計算機(jī)程序指令也可存儲在能引導(dǎo)計算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計算機(jī)可讀存儲器中,使得存儲在該計算機(jī)可讀存儲器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。
這些計算機(jī)程序指令也可裝載到計算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計算機(jī)或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計算機(jī)實現(xiàn)的處理,從而在計算機(jī)或其他可編程設(shè)備上執(zhí)行的指令提供用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。
在一個典型的配置中,計算設(shè)備包括一個或多個處理器(CPU)、輸入/輸出接口、網(wǎng)絡(luò)接口和內(nèi)存。
存儲器可能包括計算機(jī)可讀介質(zhì)中的非永久性存儲器,隨機(jī)存取存儲器(RAM)和/或非易失性內(nèi)存等形式,如只讀存儲器(ROM)或閃存(flash RAM)。存儲器是計算機(jī)可讀介質(zhì)的示例。
計算機(jī)可讀介質(zhì)包括永久性和非永久性、可移動和非可移動媒體可以由任何方法或技術(shù)來實現(xiàn)信息存儲。信息可以是計算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序的模塊或其他數(shù)據(jù)。計算機(jī)的存儲介質(zhì)的例子包括,但不限于相變內(nèi)存(PRAM)、靜態(tài)隨機(jī)存取存儲器(SRAM)、動態(tài)隨機(jī)存取存儲器(DRAM)、其他類型的隨機(jī)存取存儲器(RAM)、只讀存儲器(ROM)、電可擦除可編程只讀存儲器(EEPROM)、快閃記憶體或其他內(nèi)存技術(shù)、只讀光盤只讀存儲器(CD-ROM)、數(shù)字多功能光盤(DVD)或其他光學(xué)存儲、磁盒式磁帶,磁帶磁磁盤存儲或其他磁性存儲設(shè)備或任何其他非傳輸介質(zhì),可用于存儲可以被計算設(shè)備訪問的信息。按照本文中的界定,計算機(jī)可讀介質(zhì)不包括暫存電腦可讀媒體(transitory media),如調(diào)制的數(shù)據(jù)信號和載波。
以上僅為本申請的實施例而已,并不用于限制本申請。對于本領(lǐng)域技術(shù)人員來說,本申請可以有各種更改和變化。凡在本申請的精神和原理之內(nèi)所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本申請的權(quán)利要求范圍之內(nèi)。