亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種獲取訪問停留時間的方法及裝置制造方法

文檔序號:6517675閱讀:359來源:國知局
一種獲取訪問停留時間的方法及裝置制造方法
【專利摘要】本發(fā)明公開了一種獲取訪問停留時間的方法及裝置,該方法包括:建立網(wǎng)頁所在的服務(wù)器與客戶端之間的長連接;獲取建立長連接的時間;檢測長連接是否斷開;如果檢測到長連接斷開,則獲取斷開長連接的時間;以及根據(jù)建立長連接的時間和斷開長連接的時間,計算得到用戶訪問網(wǎng)頁的訪問停留時間。通過本發(fā)明的實施例就算網(wǎng)站本身是單網(wǎng)頁應(yīng)用,服務(wù)器也可以準(zhǔn)確獲取斷開長連接的時間,進而再結(jié)合獲取的建立長連接的時間,從而能夠準(zhǔn)確計算得到訪問停留時間,從而克服了現(xiàn)有技術(shù)中無法獲取單網(wǎng)頁應(yīng)用的訪問停留時間的問題。
【專利說明】一種獲取訪問停留時間的方法及裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于計算機【技術(shù)領(lǐng)域】,尤其涉及一種獲取訪問停留時間的方法及裝置。
【背景技術(shù)】
[0002]在Web2.0時代,提供各種應(yīng)用的交互式Web站點紛紛出現(xiàn),網(wǎng)站開發(fā)者為了評估網(wǎng)站的整體質(zhì)量,對產(chǎn)品的迭代、Π (用戶界面)的展現(xiàn)、交互的設(shè)計提供數(shù)據(jù)指導(dǎo),提出了一系列的評估指標(biāo),其中“網(wǎng)頁停留時間”是一項重要的指標(biāo)。目前的獲取網(wǎng)頁停留時間的技術(shù)方案主要是基于用戶點擊行為的統(tǒng)計或前端Ajax (基于XML的異步JavaScript,簡稱Ajax)輪詢來實現(xiàn)。
[0003]如圖1所示,當(dāng)用戶訪問某個網(wǎng)站的第I個頁面時,記錄此時的系統(tǒng)時間戳h,當(dāng)用戶接著訪問第2個頁面時,記錄此時的系統(tǒng)時間戳t2,當(dāng)用戶訪問到第N個頁面時,記錄此時的系統(tǒng)時間戳tn,此時用戶關(guān)閉瀏覽器,此時的系統(tǒng)時間戳為tn+1,則此用戶的網(wǎng)頁停留時間=tn+1 —t1。
[0004]然而在現(xiàn)有技術(shù)中由于無法準(zhǔn)確捕獲到用戶關(guān)閉瀏覽器的時間戳tn+1,導(dǎo)致無法知道用戶在最后一個頁面的時間戳,而只能采用修正的方法得到該網(wǎng)頁停留時間的近似值:
[0005]網(wǎng)頁停留時間=tn - ti+At
[0006]其中,At為 At1, At2,…,Atn —!的平均值,Atl=t2 — t1; Δ t2=t3 — t2,Atn-l=tn - tn_!
[0007]如果網(wǎng)站本身是單頁面應(yīng)用,即整個網(wǎng)站只有一個頁面的話,只能得到用戶訪問某個網(wǎng)站的第I個頁面的時間戳&,導(dǎo)致無法準(zhǔn)確計算出網(wǎng)頁訪問停留時間。

【發(fā)明內(nèi)容】

[0008]鑒于上述問題,提出了本發(fā)明以便提供一種克服上述問題或者至少部分地解決上述問題的獲取訪問停留時間的方法及裝置,實現(xiàn)準(zhǔn)確獲取網(wǎng)頁停留時間。
[0009]依據(jù)本發(fā)明的一個方面,提供了一種獲取訪問停留時間的方法,其包括:建立網(wǎng)頁所在的服務(wù)器與客戶端之間的長連接;獲取建立所述長連接的時間;檢測長連接是否斷開;如果檢測到長連接斷開,則獲取斷開長連接的時間;根據(jù)建立長連接的時間和斷開長連接的時間,計算得到用戶訪問網(wǎng)頁的訪問停留時間。
[0010]可選地,建立網(wǎng)頁所在的服務(wù)器與客戶端之間的長連接的步驟包括:網(wǎng)頁所在的服務(wù)器接收客戶端發(fā)送的握手消息;根據(jù)握手消息,檢測客戶端請求與服務(wù)器之間建立的連接是否為長連接;如果客戶端請求建立的連接是長連接,則服務(wù)器向客戶端發(fā)送握手消息的響應(yīng)消息,并建立與客戶端之間的長連接。
[0011]可選地,檢測長連接是否斷開的步驟包括:服務(wù)器按照間隔第一預(yù)先設(shè)定的時間向客戶端發(fā)送心跳檢測信號;服務(wù)器判斷是否在第二預(yù)先設(shè)定的時間內(nèi)收到客戶端發(fā)送的響應(yīng)心跳檢測信號的心跳信號;如果服務(wù)器在第二預(yù)先設(shè)定的時間內(nèi)收到客戶端發(fā)送的響應(yīng)心跳檢測信號的心跳信號,則服務(wù)器與客戶端之間的長連接正常;如果服務(wù)器在第二預(yù)先設(shè)定的時間內(nèi)沒有收到客戶端發(fā)送的響應(yīng)心跳檢測信號的心跳信號,則服務(wù)器與客戶端之間的長連接斷開。
[0012]可選地,如果檢測到長連接斷開,則獲取斷開長連接的時間的步驟為:如果檢測到服務(wù)器與客戶端之間的長連接斷開的斷開事件之后,從斷開事件的回調(diào)函數(shù)中,獲取斷開長連接的時間。
[0013]依據(jù)本發(fā)明的另一個方面,還提供了一種獲取訪問停留時間的裝置,其包括:連接建立模塊,用于建立網(wǎng)頁所在的服務(wù)器與客戶端之間的長連接;開始時間獲取模塊,用于獲取建立長連接的時間;連接斷開檢測模塊,用于檢測長連接是否斷開;結(jié)束時間獲取模塊,用于如果連接斷開檢測模塊檢測到長連接斷開,則獲取斷開長連接的時間;訪問停留時間獲取模塊,用于根據(jù)開始時間獲取模塊獲取的建立長連接的時間和結(jié)束時間獲取模塊獲取的斷開長連接的時間,計算得到用戶訪問網(wǎng)頁的訪問停留時間。
[0014]可選地,連接建立模塊包括:握手消息接收單元,用于接收客戶端發(fā)送的握手消息;連接類型檢測模塊,用于根據(jù)握手消息檢測客戶端請求與服務(wù)器建立的連接是否為長連接;連接建立單元,用于如果客戶端請求建立的連接是長連接,則向客戶端發(fā)送握手消息的響應(yīng)消息,并建立與客戶端之間的長連接。
[0015]可選地,連接斷開檢測模塊包括:心跳檢測信號發(fā)送單元,用于按照間隔第一預(yù)先設(shè)定的時間向客戶端發(fā)送心跳檢測信號;連接斷開檢測單元,用于如果在第二預(yù)先設(shè)定的時間內(nèi)收到客戶端發(fā)送的響應(yīng)心跳檢測信號的心跳信號,則表示服務(wù)器與客戶端之間的長連接正常;以及如果心跳信號接收單元在第二預(yù)先設(shè)定的時間內(nèi)沒有收到客戶端發(fā)送的響應(yīng)心跳檢測信號的心跳信號,則表示服務(wù)器與客戶端之間的長連接斷開。
[0016]可選地,結(jié)束時間獲取模塊進一步用于如果檢測到服務(wù)器與客戶端之間的長連接斷開,從檢測到的斷開事件的回調(diào)函數(shù)中,獲取斷開長連接的時間。
[0017]由上述技術(shù)方案可知,本發(fā)明的實施例具有下面的有益效果:
[0018]在本發(fā)明的實施例中,首先建立客戶端與服務(wù)器之間的長連接,并獲取建立長連接的時間,然后當(dāng)長連接斷開時,獲取斷開長連接的時間,使得就算網(wǎng)站本身是單網(wǎng)頁應(yīng)用,服務(wù)器也可以根據(jù)獲取的斷開長連接的時間和建立長連接的時間計算出訪問停留時間,從而克服了現(xiàn)有技術(shù)中無法獲取單網(wǎng)頁應(yīng)用的訪問停留時間的問題。
[0019]進一步地,在本發(fā)明的實施例中,當(dāng)服務(wù)器與客戶端之間建立長連接之后,服務(wù)器與客戶端之間傳輸數(shù)據(jù)包不需要每次都使用HTTP協(xié)議發(fā)送HTTP請求,因此通過本發(fā)明的實施例獲取訪問停留時間相對于現(xiàn)有技術(shù)中的Ajax輪詢方式,可以有效節(jié)省帶寬資源,以及節(jié)省服務(wù)器的處理資源。
【專利附圖】

【附圖說明】
[0020]通過閱讀下文優(yōu)選實施方式的詳細描述,各種其他的優(yōu)點和益處對于本領(lǐng)域普通技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實施方式的目的,而并不認為是對本發(fā)明的限制。而且在整個附圖中,用相同的參考符號表示相同的部件。在附圖中:
[0021]圖1示出了現(xiàn)有技術(shù)中統(tǒng)計用戶點擊行為,以獲取訪問停留時間的示意圖;
[0022]圖2示出了根據(jù)本發(fā)明實施例中獲取訪問停留時間的方法的流程圖;[0023]圖3示出了根據(jù)本發(fā)明實施例中基于一次用戶訪問過程中,客戶端和服務(wù)器建立長連接,并獲取訪問停留時間的示意圖;以及
[0024]圖4示出了根據(jù)本發(fā)明實施例中獲取訪問停留時間的結(jié)構(gòu)框圖。
【具體實施方式】
[0025]下面將參照附圖更詳細地描述本公開的示例性實施例。雖然附圖中顯示了本公開的示例性實施例,然而應(yīng)當(dāng)理解,可以以各種形式實現(xiàn)本公開而不應(yīng)被這里闡述的實施例所限制。相反,提供這些實施例是為了能夠更透徹地理解本公開,并且能夠?qū)⒈竟_的范圍完整的傳達給本領(lǐng)域的技術(shù)人員。
[0026]下面結(jié)合圖2來說明根據(jù)本發(fā)明一個實施例的、適于解決上述技術(shù)問題的獲取訪問停留時間的方法的流程圖。該方法200始于步驟S201,在步驟S201中,建立網(wǎng)頁所在的服務(wù)器與客戶端之間的長連接。
[0027]長連接是指在一個連接上可以連續(xù)發(fā)送多個數(shù)據(jù)包,然后斷開連接。與長連接相對應(yīng)的是短連接,短連接是指通訊雙方有數(shù)據(jù)交互時,就建立一個連接,數(shù)據(jù)發(fā)送完成后,則斷開此連接,即每次連接只完成一項業(yè)務(wù)的發(fā)送。在本發(fā)明的實施例中,長連接可以是WebSocket長連接、HTTP長連接、TCP長連接,當(dāng)然也并不限于此。
[0028]以WebSocket長連接為例,客戶端可以使用連接字符串(例如http://xxx.xxx.XXX.xxx:8080)來與網(wǎng)頁所在的服務(wù)器建立WebSocket長連接。其中,WebSocket協(xié)議是HTML5的一種新的通信協(xié)議,其實現(xiàn)了瀏覽器與服務(wù)器的雙向通訊。
[0029]當(dāng)客戶端不支持長連接時,可以在客戶端上引入相應(yīng)的數(shù)據(jù)包,例如選擇包名為“socket, i0.js (—個在不同的瀏覽器和移動設(shè)備中構(gòu)建實時應(yīng)用的js庫)”的數(shù)據(jù)包,如下為實現(xiàn)客戶端與服務(wù)器建立 長連接的代碼:
[0030]〈script src=///resource/js/socket.10.js^X/script)
[0031]<!—引入 socket, i0.js 包一>
[0032]〈script〉
[0033]var socket=i0.connect (' http: //xxx.xxx.xxx.xxx: 8080) ; // 客戶端根據(jù)http: //xxx.xxx.xxx.xxx: 8080建立與月艮務(wù)器白勺WebSocket長連接
[0034]〈/script〉
[0035]可選地,在本發(fā)明的實施例中,步驟S201包括:步驟S2011、步驟S2013、步驟S2015和步驟S2017,其中在步驟S2011中,網(wǎng)頁所在的服務(wù)器接收客戶端發(fā)送的握手消息。隨后在步驟S2013中,根據(jù)握手消息,檢測客戶端請求與服務(wù)器之間建立的連接是否為長連接。
[0036]可選地,在本發(fā)明的實施例中,可以基于建立連接所采用的通訊協(xié)議來判斷是否為長連接,例如如果采用WebSocket協(xié)議建立連接,則可以判斷得到客戶端請求與服務(wù)器之間建立的連接為WebSocket長連接,當(dāng)然也并不限于此。
[0037]如果客戶端請求建立的連接是長連接,則進入步驟S2015,在步驟S2015中,服務(wù)器向客戶端發(fā)送握手消息的響應(yīng)消息,并建立與客戶端之間的長連接。
[0038]雖然在現(xiàn)有技術(shù)中,也可以通過Ajax (—種基于Javascript異步請求技術(shù))輪詢來獲取停留時間,但是通過Ajax輪詢的方式,服務(wù)器需要向客戶端發(fā)送大量的HTTP請求,會浪費帶寬和服務(wù)器的處理資源。而在本發(fā)明的實施例中,當(dāng)服務(wù)器與客戶端之間建立長連接之后,服務(wù)器與客戶端之間傳輸數(shù)據(jù)包不需要每次都使用HTTP協(xié)議發(fā)送HTTP請求,因此通過本發(fā)明的實施例獲取訪問停留時間相對于現(xiàn)有技術(shù)中的Ajax輪詢方式,可以有效節(jié)省帶寬資源,以及節(jié)省服務(wù)器的處理資源。
[0039]如果客戶端請求建立的連接不是長連接(例如是HTTP短連接),則進入步驟2017,在步驟S2017中,服務(wù)器向客戶端發(fā)送握手消息的響應(yīng)消息,并建立與客戶端之間的其他連接(例如HTTP短連接)。
[0040]隨后,在步驟S203中,獲取建立長連接的時間。
[0041]以WebSocket長連接為例,客戶端可以通過服務(wù)器本地的8080端口訪問服務(wù)器,因此服務(wù)器可以通過監(jiān)聽本地的8080端口,來獲取建立WebSocket長連接的時間tstart和客戶端的地址(例如客戶端的IP地址)。
[0042]隨后,在步驟S205中,檢測長連接是否斷開。
[0043]可選地,在本發(fā)明的實施例中可以采用心跳檢測機制來判斷服務(wù)器和客戶端之間的長連接是否斷開,當(dāng)然也并不限于此。
[0044]以WebSocket長連接為例,服務(wù)器可以通過本地的8080端口接收來客戶端發(fā)送的心跳信號,如果服務(wù)器在預(yù)定的時間段內(nèi)沒有接收到客戶端發(fā)送的心跳信號,則可以判定WebSocket長連接斷開。
[0045]在本發(fā)明的實施例中,步驟S205可以包括:步驟S2051和步驟S2053,具體步驟如下:
[0046]步驟S2051、服務(wù)器按照間隔第一預(yù)先設(shè)定的時間向客戶端發(fā)送心跳檢測信號。
[0047]例如:服務(wù)器每間隔20秒向客戶端發(fā)送一次心跳檢測信號,該心跳檢測信號用于提示接收到心跳檢測信號的客戶端需要向服務(wù)器發(fā)送心跳信號。當(dāng)然可以理解的是,在本發(fā)明的實施例中并不限定第一預(yù)先設(shè)定的時間的具體值。
[0048]步驟S2053、服務(wù)器判斷是否在第二預(yù)先設(shè)定的時間內(nèi)收到客戶端發(fā)送的響應(yīng)心跳檢測信號的心跳信號。
[0049]如果服務(wù)器在第二預(yù)先設(shè)定的時間內(nèi)收到客戶端發(fā)送的響應(yīng)心跳檢測信號的心跳信號,則可以判斷服務(wù)器與客戶端之間的長連接正常。
[0050]如果服務(wù)器在第二預(yù)先設(shè)定的時間內(nèi)沒有收到客戶端發(fā)送的響應(yīng)心跳檢測信號的心跳信號,則可以判斷服務(wù)器與客戶端之間的長連接斷開。
[0051]可選地,在本發(fā)明的實施例中,第二預(yù)先設(shè)定的時間可以是25秒,當(dāng)然可以理解的是,在本發(fā)明的實施例中并不限定第二預(yù)先設(shè)定的時間的具體值。
[0052]如果檢測到長連接斷開,則進入步驟S207,在步驟S207中,獲取斷開長連接的時間。
[0053]可選地,在步驟S207中,如果檢測到服務(wù)器與客戶端之間的長連接斷開的斷開事件之后,可以通過服務(wù)器上預(yù)先設(shè)定的端口從斷開事件的回調(diào)函數(shù)(即當(dāng)服務(wù)器在預(yù)設(shè)時間之內(nèi)未獲得心跳信號,則調(diào)用此函數(shù))中,獲取斷開長連接的時間tmd。
[0054]以WebSocket長連接為例,上述預(yù)先設(shè)的端口可以是服務(wù)器上的8080端口。
[0055]隨后,在步驟S209中,根據(jù)建立長連接的時間和斷開長連接的時間,計算得到用戶訪問網(wǎng)頁的訪問停留時間。[0056]在本發(fā)明的實施例中,可以根據(jù)如下公式計算得到用戶訪問網(wǎng)頁的訪問停留時間:
[0057]訪問停留時間=斷開長連接的時間tmd —建立長連接的時間tstart
[0058]在本發(fā)明的實施例中,首先建立客戶端與服務(wù)器之間的長連接,并獲取建立長連接的時間,然后當(dāng)長連接斷開時,獲取斷開長連接的時間,使得就算網(wǎng)站本身是單網(wǎng)頁應(yīng)用,服務(wù)器也可以根據(jù)獲取的斷開長連接的時間和建立長連接的時間計算出訪問停留時間,從而克服了現(xiàn)有技術(shù)中無法獲取單網(wǎng)頁應(yīng)用的訪問停留時間的問題。
[0059]以WebSocket長連接為例,在本發(fā)明的實施例中,服務(wù)器可以用Node, js (用來編寫高性能網(wǎng)絡(luò)服務(wù)器的JavaScript工具包)的socket, io模塊實現(xiàn)WebSocket服務(wù)器的功能,WebSocket服務(wù)器可以監(jiān)聽本地的8080端口,并設(shè)置發(fā)送到客戶端心跳檢測信號的時間間隔及接收心跳信號的超時時間。
[0060]服務(wù)器首先監(jiān)聽與客戶端之間的WebSocket長連接,建立WebSocket長連接時獲得客戶端的地址以及建立WebSocket長連接的時間tstart,然后可以通過來自客戶端的心跳信號來監(jiān)聽客戶端斷開WebSocket長連接的關(guān)閉事件,如果WebSocket服務(wù)器在超時時間內(nèi)沒有接收到客戶端的心跳信號,則可以判斷客戶端斷開WebSocket長連接。然后通過客戶端斷開WebSocket長連接的關(guān)閉事件的回調(diào)函數(shù),獲得客戶端斷開WebSocket長連接的時間tmd。
[0061]下述代碼為WebSocket服務(wù)器實現(xiàn)上述功能的代碼:
[0062]
var io = require('socket.1o').listen(8080); //引入 socket.1o 模塊,并監(jiān)聽 8080
端口
i0.set('heartbeat interval',20); //設(shè)置心跳檢測信號發(fā)送間隔為20秒i0.set('heartbeat timeout',25); //設(shè)置獲取心跳信號的超時時間為25秒i0.sockets.0n('connection', function (socket) { //監(jiān)聽連接事件,在連接事件中執(zhí)行一些初始化的工作
var address = socket.handshake.address; //獲取地址對象
var ip = address.address; //從地址對象中獲取客戶端的IP地址
var start = Math.round(new Date().getTime()/1000); /'/'得到當(dāng)前時刻的系統(tǒng)時間戳,并設(shè)置為開始時間
socket.0n('disconnect', function () { //監(jiān)聽連接關(guān)閉事件
[0063]var end = Math.round(nevv Date().getTime()/1000); /'/'得到當(dāng)前時刻
的系統(tǒng)時間戳,并設(shè)置為結(jié)束時間try{
inongoclient.0pen(function(err, mongoclient) { //與 mongodb 建立連接,此處采用mongodb (—種非關(guān)系型數(shù)據(jù)庫)來記錄,也可以采用其他存儲來記錄
var db = mongoclient.db(dbName); /7選擇數(shù)據(jù)庫db.collection(collectionNaine).1nsert({ip:1p,start:start,end:end,time:end-start{,function(err, result) { //選擇數(shù)據(jù)表,并向庫里寫入客戶端的IP地址、開始時間、結(jié)束時間和停留時間
mongoclient.close();//關(guān)閉 mongodb 的連接
});});
J catch(e) { //捕獲異常
console.log(e); //輸出異常,此處可以記錄日志
}
});});
[0064]需要說明的是,圖2所示的方法并不限定按所示的各步驟的順序進行,可以根據(jù)需要調(diào)整各步驟的先后順序,另外,所述步驟也不限定于上述步驟劃分,上述步驟可以進一步拆分成更多步驟也可以合并成更少步驟。
[0065]如圖3所示,首先WebSocket客戶端向TCP客戶端發(fā)送連接請求;TCP客戶端向TCP服務(wù)器發(fā)送SYN (synchronous,是TCP/IP建立連接時使用的握手信號)消息;TCP服務(wù)器向TCP客戶端發(fā)送SYN響應(yīng)消息,并與WebSocket客戶端建立連接。然后,WebSocket客戶端向WebSocket服務(wù)器發(fā)送握手消息號;WebSocket服務(wù)器向WebSocket客戶端發(fā)送該握手消息的響應(yīng)消息,建立與WebSocket客戶端之間的WebSocket長連接,獲取建立WebSocket長連接的時間tstart,WebSocket服務(wù)器可以每間隔第一預(yù)先設(shè)定的時間(例如20秒)向WebSocket客戶端發(fā)送心跳檢測信號,并判斷是否在第二預(yù)先設(shè)定的時間(例如25秒)內(nèi)收到WebSocket客戶端發(fā)送的心跳信號,如果在WebSocket服務(wù)器在第二預(yù)先設(shè)定的時間內(nèi)沒有收到WebSocket客戶端發(fā)送的心跳信號,則可以判斷WebSocket服務(wù)器與WebSocket客戶端之間的WebSocket長連接斷開,獲取斷開WebSocket長連接的時間tend,最后根據(jù)獲取的斷開WebSocket長連接的時間tend和建立WebSocket長連接的時間tstart,計算出訪問停留時間。[0066]下面結(jié)合圖4說明根據(jù)本發(fā)明一個實施例、適于解決上述技術(shù)問題的一種獲取訪問停留時間的裝置。
[0067]如圖4所示,根據(jù)本發(fā)明的實施例的獲取訪問停留時間的裝置400可以主要包括:連接建立模塊401、開始時間獲取模塊403、連接斷開檢測模塊405、結(jié)束時間獲取模塊407、訪問停留時間獲取模塊409。應(yīng)當(dāng)理解,圖4中所表示的各個模塊的連接關(guān)系僅為示例,本領(lǐng)域技術(shù)人員完全可以采用其它的連接關(guān)系,只要在這樣的連接關(guān)系下各個模塊也能夠?qū)崿F(xiàn)本發(fā)明的功能即可。
[0068]在本說明書中,各個模塊的功能可以通過使用專用硬件、或者能夠與適當(dāng)?shù)能浖嘟Y(jié)合來執(zhí)行處理的硬件來實現(xiàn)。這樣的硬件或?qū)S糜布梢园▽S眉呻娐?ASIC)、各種其它電路、各種處理器等。當(dāng)由處理器實現(xiàn)時,該功能可以由單個專用處理器、單個共享處理器、或者多個獨立的處理器(其中某些可能被共享)來提供。另外,處理器不應(yīng)該被理解為專指能夠執(zhí)行軟件的硬件,而是可以隱含地包括、而不限于數(shù)字信號處理器(DSP)硬件、用來存儲軟件的只讀存儲器(ROM)、隨機存取存儲器(RAM)、以及非易失存儲設(shè)備。
[0069]在本發(fā)明的實施例中,連接建立模塊401用于建立網(wǎng)頁所在的服務(wù)器與客戶端之間的長連接。在本發(fā)明的實施例中,長連接可以是WebSocket長連接、HTTP長連接、TCP長連接,當(dāng)然也并不限于此。
[0070]在本發(fā)明的實施例中,開始時間獲取模塊403用于獲取建立長連接的時間。以WebSocket長連接為例,可以通過監(jiān)聽本地的8080端口,來獲取建立WebSocket長連接的時間tstart和客戶端的地址(例如客戶端的IP地址)。
[0071]在本發(fā)明的實施例中,連接斷開檢測模塊405用于檢測長連接是否斷開??蛇x地,在本發(fā)明的實施例中連接斷開檢測模塊405可以采用心跳檢測機制來判斷長連接是否斷開,當(dāng)然也并不限于此。
[0072]在本發(fā)明的實施例中,結(jié)束時間獲取模塊407用于如果連接斷開檢測模塊405檢測到長連接斷開,則獲取斷開長連接的時間。
[0073]在本發(fā)明的實施例中,訪問停留時間獲取模塊409用于根據(jù)開始時間獲取模塊403獲取的建立長連接的時間和結(jié)束時間獲取模塊407獲取的斷開長連接的時間,計算得到用戶訪問網(wǎng)頁的訪問停留時間??蛇x地,在本發(fā)明的實施例中,訪問停留時間獲取模塊409可以根據(jù)如下公式計算得到用戶訪問網(wǎng)頁的訪問停留時間:
[0074]訪問停留時間=斷開長連接的時間tmd —建立長連接的時間tstart
[0075]可選地,在本發(fā)明的實施例中,連接建立模塊401包括:
[0076]握手消息接收單元,用于接收客戶端發(fā)送的握手消息。以WebSocket長連接為例,客戶端可以使用連接字符串(例如http://xxx.xxx.xxx.xxx:8080)來與網(wǎng)頁所在的服務(wù)器建立長連接。其中,WebSocket協(xié)議是HTML5的一種新的通信協(xié)議,其實現(xiàn)了瀏覽器與服務(wù)器的雙向通訊。
[0077]連接類型檢測模塊,用于根據(jù)握手消息檢測客戶端請求與服務(wù)器建立的連接是否為長連接。可選地,在本發(fā)明的實施例中,連接類型檢測模塊可以基于建立連接所采用的通訊協(xié)議來判斷是否為長連接,例如如果采用WebSocket協(xié)議建立連接,則可以判斷得到客戶端請求與服務(wù)器之間建立的連接為長連接。
[0078]連接建立單元,用于如果客戶端請求建立的連接是長連接,則向客戶端發(fā)送所述握手消息的響應(yīng)消息,并建立與客戶端之間的長連接。
[0079]在現(xiàn)有技術(shù)中,也可以通過Ajax輪詢來獲取停留時間,但是通過Ajax輪詢的方式,服務(wù)器會向客戶端發(fā)送大量的HTTP請求,浪費帶寬和服務(wù)器的處理資源。而在本發(fā)明的實施例中,當(dāng)服務(wù)器與客戶端之間建立長連接之后,服務(wù)器與客戶端之間傳輸數(shù)據(jù)包不需要每次都使用HTTP協(xié)議發(fā)送HTTP請求,因此通過本發(fā)明的實施例獲取訪問停留時間相對于現(xiàn)有技術(shù)中的Ajax輪詢方式,可以有效節(jié)省帶寬資源,以及節(jié)省服務(wù)器的處理資源。
[0080]可選地,在本發(fā)明的實施例中,連接斷開檢測模塊405包括:
[0081]心跳檢測信號發(fā)送單元,用于按照間隔第一預(yù)先設(shè)定的時間向客戶端發(fā)送心跳檢測信號??蛇x地,心跳檢測信號發(fā)送單元每間隔20秒向客戶端發(fā)送一次心跳檢測信號,該心跳檢測信號用于提示接收到心跳檢測信號的客戶端需要向服務(wù)器發(fā)送心跳信號,當(dāng)然可以理解的是,在本發(fā)明的實施例中并不限定第一預(yù)先設(shè)定的時間的具體值。
[0082]連接斷開檢測單元,用于如果在第二預(yù)先設(shè)定的時間內(nèi)收到客戶端發(fā)送的響應(yīng)心跳檢測信號的心跳信號,則表示服務(wù)器與所述客戶端之間的長連接正常;以及如果心跳信號接收單元在第二預(yù)先設(shè)定的時間內(nèi)沒有收到客戶端發(fā)送的響應(yīng)心跳檢測信號的心跳信號,則表示服務(wù)器與客戶端之間的長連接斷開??蛇x地,在本發(fā)明的實施例中,第二預(yù)先設(shè)定的時間可以是25秒,當(dāng)然可以理解的是,在本發(fā)明的實施例中并不限定第二預(yù)先設(shè)定的時間的具體值。
[0083]可選地,在本發(fā)明的實施例中,結(jié)束時間獲取模塊407進一步用于如果檢測到所述服務(wù)器與客戶端之間的長連接斷開的斷開時間之后,通過服務(wù)器上預(yù)先設(shè)定的端口從斷開事件的回調(diào)函數(shù)中,獲取斷開長連接的時間。以WebSocket長連接為例,上述預(yù)先設(shè)的端口可以是服務(wù)器上的8080端口。
[0084]在本發(fā)明的實施例中,首先建立客戶端與服務(wù)器之間的長連接,然后通過長連接斷開的斷開事件的回調(diào)函數(shù)中獲取斷開長連接的時間,使得就算網(wǎng)站本身是單網(wǎng)頁應(yīng)用,服務(wù)器也可以準(zhǔn)確獲取斷開長連接的時間,進而結(jié)合建立長連接的時間,計算得到訪問停留時間,從而克服了現(xiàn)有技術(shù)中無法獲取單網(wǎng)頁應(yīng)用的訪問停留時間的問題。
[0085]在此提供的算法和顯示不與任何特定計算機、虛擬系統(tǒng)或者其它設(shè)備固有相關(guān)。各種通用系統(tǒng)也可以與基于在此的示教一起使用。根據(jù)上面的描述,構(gòu)造這類系統(tǒng)所要求的結(jié)構(gòu)是顯而易見的。此外,本發(fā)明也不針對任何特定編程語言。應(yīng)當(dāng)明白,可以利用各種編程語言實現(xiàn)在此描述的本發(fā)明的內(nèi)容,并且上面對特定語言所做的描述是為了披露本發(fā)明的最佳實施方式。
[0086]在此處所提供的說明書中,說明了大量具體細節(jié)。然而,能夠理解,本發(fā)明的實施例可以在沒有這些具體細節(jié)的情況下實踐。在一些實例中,并未詳細示出公知的方法、結(jié)構(gòu)和技術(shù),以便不模糊對本說明書的理解。
[0087]類似地,應(yīng)當(dāng)理解,為了精簡本公開并幫助理解各個發(fā)明方面中的一個或多個,在上面對本發(fā)明的示例性實施例的描述中,本發(fā)明的各個特征有時被一起分組到單個實施例、圖、或者對其的描述中。然而,并不應(yīng)將該公開的方法解釋成反映如下意圖:即所要求保護的本發(fā)明要求比在每個權(quán)利要求中所明確記載的特征更多的特征。更確切地說,如下面的權(quán)利要求書所反映的那樣,發(fā)明方面在于少于前面公開的單個實施例的所有特征。因此,遵循【具體實施方式】的權(quán)利要求書由此明確地并入該【具體實施方式】,其中每個權(quán)利要求本身都作為本發(fā)明的單獨實施例。
[0088]本領(lǐng)域那些技術(shù)人員可以理解,可以對實施例中的設(shè)備中的模塊進行自適應(yīng)性地改變并且把它們設(shè)置在與該實施例不同的一個或多個設(shè)備中。可以把實施例中的模塊或單元或組件組合成一個模塊或單元或組件,以及此外可以把它們分成多個子模塊或子單元或子組件。除了這樣的特征和/或過程或者單元中的至少一些是相互排斥之外,可以采用任何組合對本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的所有特征以及如此公開的任何方法或者設(shè)備的所有過程或單元進行組合。除非另外明確陳述,本說明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的每個特征可以由提供相同、等同或相似目的替代特征來代替。
[0089]此外,本領(lǐng)域的技術(shù)人員能夠理解,盡管在此所述的一些實施例包括其它實施例中所包括的某些特征而不是其它特征,但是不同實施例的特征的組合意味著處于本發(fā)明的范圍之內(nèi)并且形成不同的實施例。例如,在下面的權(quán)利要求書中,所要求保護的實施例的任意之一都可以以任意的組合方式來使用。
[0090]本發(fā)明的各個部件實施例可以以硬件實現(xiàn),或者以在一個或者多個處理器上運行的軟件模塊實現(xiàn),或者以它們的組合實現(xiàn)。本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,可以在實踐中使用微處理器或者數(shù)字信號處理器(DSP )來實現(xiàn)根據(jù)本發(fā)明實施例的獲取訪問停留時間的裝置中的一些或者全部部件的一些或者全部功能。本發(fā)明還可以實現(xiàn)為用于執(zhí)行這里所描述的方法的一部分或者全部的設(shè)備或者裝置程序(例如,計算機程序和計算機程序產(chǎn)品)。這樣的實現(xiàn)本發(fā)明的程序可以存儲在計算機可讀介質(zhì)上,或者可以具有一個或者多個信號的形式。這樣的信號可以從因特網(wǎng)網(wǎng)站上下載得到,或者在載體信號上提供,或者以任何其他形式提供。
[0091]應(yīng)該注意的是上述實施例對本發(fā)明進行說明而不是對本發(fā)明進行限制,并且本領(lǐng)域技術(shù)人員在不脫離所附權(quán)利要求的范圍的情況下可設(shè)計出替換實施例。在權(quán)利要求中,不應(yīng)將位于括號之間的任何參考符號構(gòu)造成對權(quán)利要求的限制。單詞“包含”不排除存在未列在權(quán)利要求中的元件或步驟。位于元件之前的單詞“一”或“一個”不排除存在多個這樣的元件。本發(fā)明可以借助于包括有若干不同元件的硬件以及借助于適當(dāng)編程的計算機來實現(xiàn)。在列舉了若干設(shè)備的單元權(quán)利要求中,這些設(shè)備中的若干個可以是通過同一個硬件項來具體體現(xiàn)。單詞第一、第二、以及第三等的使用不表示任何順序??蓪⑦@些單詞解釋為名稱。
【權(quán)利要求】
1.一種獲取訪問停留時間的方法,其包括:建立網(wǎng)頁所在的服務(wù)器與客戶端之間的長連接;獲取建立所述長連接的時間;檢測所述長連接是否斷開;如果檢測到所述長連接斷開,則獲取斷開所述長連接的時間;根據(jù)建立所述長連接的時間和斷開所述長連接的時間,計算得到用戶訪問網(wǎng)頁的訪問停留時間。
2.根據(jù)權(quán)利要求1所述的方法,其中,所述建立網(wǎng)頁所在的服務(wù)器與客戶端之間的長連接的步驟包括:所述網(wǎng)頁所在的服務(wù)器接收所述客戶端發(fā)送的握手消息;根據(jù)所述握手消息,檢測所述客戶端請求與所述服務(wù)器之間建立的連接是否為長連接;如果所述客戶端請求建立的連接是長連接,則所述服務(wù)器向所述客戶端發(fā)送所述握手消息的響應(yīng)消息,并建立與所述客戶端之間的長連接。
3.根據(jù)權(quán)利要求1~2任一項所述的方法,其中,所述檢測所述長連接是否斷開的步驟包括: 所述服務(wù)器按照間隔第一預(yù)先設(shè)定的時間向所述客戶端發(fā)送心跳檢測信號;所述服務(wù)器判斷是否在第二預(yù)先設(shè)定的時間內(nèi)收到所述客戶端發(fā)送的響應(yīng)所述心跳檢測信號的心跳信號;如果所述服務(wù)器在第二預(yù)先設(shè)定的時間內(nèi)收到所述客戶端發(fā)送的響應(yīng)所述心跳檢測信號的心跳信號,則所述服務(wù)器與所述客戶端之間的長連接正常;如果所述服務(wù)器在第二預(yù)先設(shè)定的時間內(nèi)沒有收到所述客戶端發(fā)送的響應(yīng)所述心跳檢測信號的心跳信號,則所述服務(wù)器與所述客戶端之間的長連接斷開。
4.根據(jù)權(quán)利要求1~3任一項所述的方法,其中,所述如果檢測到所述長連接斷開,則獲取斷開所述長連接的時間的步驟為:如果檢測到所述服務(wù)器與所述客戶端之間的長連接斷開的斷開事件之后,從所述斷開事件的回調(diào)函數(shù)中,獲取斷開所述長連接的時間。
5.一種獲取訪問停留時間的裝置,其包括:連接建立模塊,用于建立網(wǎng)頁所在的服務(wù)器與客戶端之間的長連接;開始時間獲取模塊,用于獲取建立所述長連接的時間;連接斷開檢測模塊,用于檢測所述長連接是否斷開;結(jié)束時間獲取模塊,用于如果所述連接斷開檢測模塊檢測到所述長連接斷開,則獲取斷開所述長連接的時間;訪問停留時間獲取模塊,用于根據(jù)所述開始時間獲取模塊獲取的建立所述長連接的時間和所述結(jié)束時間獲取模塊獲取的斷開所述長連接的時間,計算得到用戶訪問網(wǎng)頁的訪問停留時間。
6.根據(jù)權(quán)利要求5所述的裝置,其中,所述連接建立模塊包括:握手消息接收單元,用于接收所述客戶端發(fā)送的握手消息;連接類型檢測模塊,用于根據(jù)所述握手消息檢測所述客戶端請求與所述服務(wù)器建立的連接是否為長連接;連接建立單元,用于如果所述客戶端請求建立的連接是長連接,則向所述客戶端發(fā)送所述握手消息的響應(yīng)消息,并建立與所述客戶端之間的長連接。
7.根據(jù)權(quán)利要求5~6任一項所述的裝置,其中,所述連接斷開檢測模塊包括:心跳檢測信號發(fā)送單元,用于按照間隔第一預(yù)先設(shè)定的時間向所述客戶端發(fā)送心跳檢測信號;連接斷開檢測單元,用于如果在第二預(yù)先設(shè)定的時間內(nèi)收到所述客戶端發(fā)送的響應(yīng)所述心跳檢測信號的心跳信號,則表示所述服務(wù)器與所述客戶端之間的長連接正常;以及如果所述心跳信號接收單元在第二預(yù)先設(shè)定的時間內(nèi)沒有收到所述客戶端發(fā)送的響應(yīng)所述心跳檢測信號的心跳信號,則表示所述服務(wù)器與所述客戶端之間的長連接斷開。
8.根據(jù)權(quán)利要求5~7任一項所述的裝置,其中,所述結(jié)束時間獲取模塊進一步用于如果檢測到所述服務(wù)器與所述客戶端之間的長連接斷開,從檢測到的斷開事件的回調(diào)函數(shù)中,獲取斷開所 述長連接的時間。
【文檔編號】G06F17/30GK103605689SQ201310536079
【公開日】2014年2月26日 申請日期:2013年11月1日 優(yōu)先權(quán)日:2013年11月1日
【發(fā)明者】謝意 申請人:北京奇虎科技有限公司, 奇智軟件(北京)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1