1. 程式人生 > >關於采集用戶頁面停留時長的一些思路

關於采集用戶頁面停留時長的一些思路

服務器 沒有 錯誤信息 -1 .... 1.2 獲取 任務 采集

關於 記錄用戶在頁面停留時長的一些思路


客戶端=====================================================================

(全部采用ajax後臺發送數據)


進入頁面時,開始計時,發送的數據為:
{id:"",type:"startTime",url="當前瀏覽的頁面地址"}


響應的數據:
{code:"響應代碼",msg="錯誤信息",id="當前記錄的唯一編號"}


心跳計時,每隔幾秒發送數據到接口:
{id:"當前記錄的唯一編號",type:"heartBeat",url="當前瀏覽的頁面地址"}
響應的數據:
{code:"響應代碼",msg="錯誤信息",id="當前記錄的唯一編號"}

服務端=====================================================================
1、根據請求的type判斷發送的數據類型
  1.1、開始記錄 startTime (請求的數據格式:{id:"",type:"startTime",url="當前瀏覽的頁面地址"})
    1.1.1、獲取當前日期已存儲的記錄總數,在redis中的key為 當前年月日_count(如:2017_08_01_count),如果沒有就創建,默認值為0
(備註:當前時間為23點或23點以後,將記錄為明天的,比如 2017年8月1日23:00 對應的key為 2017_08_02_count

)
    1.1.2、創建記錄唯一id (根據 當前年月日_已記錄的總數+1 創建,如:2017_08_01_0 ),並將總數+1
    1.1.3、記錄當前時間,並設置最後時間(endTime)為當前時間+3秒
    1.1.4、使用之前創建的id作為key,將數據寫入redis(寫入失敗時將 總數-1)
    1.1.5、將處理的結果返回到客戶端
       (響應的數據格式 {code:"",msg="",id=id} ,返回成功code=200,否則為失敗,msg為錯誤信息,id為存入redis的key )


  1.2、心跳計時 heartBeat (請求的數據格式:{id:"2017_08_01_0",type:"startTime",url="當前瀏覽的頁面地址"})
    1.2.1、查詢redis中是否已存在請求中的key,如果不存在則以 startTime 進行處理
    1.2.2、修改key對應值的endTime為當前時間
    1.2.3、將處理的結果返回到客戶端
       (響應的數據格式 {code:"",msg="",id=id} ,返回成功code=200,否則為失敗,msg為錯誤信息,id為存入redis的key )





統計服務=====================================================================

定時任務,在每天的淩晨服務器訪問壓力小時執行

取得當前的時間減去一天獲得前一天的年月日,以此獲取前一天的數據總量的key,如:2017_07_31_count

取得總量後即可根據 年月日_編號 來獲取所有的數據,如:2017_07_31_0、2017_07_31_1....2017_07_31_2000

把前一天所有數據進行統計並寫入數據庫,再將已記錄到數據庫的數據從redis中移除

=============================================================================


這樣就基本完成了 用戶在頁面停留時長的記錄。

當然還有很多缺陷,希望大佬們多多指正。

【ps:轉載請註明出處】

關於采集用戶頁面停留時長的一些思路