关于采集用户页面停留时长的一些思路

关于  记录用户在页面停留时长的一些思路

客户端=====================================================================

(全部采用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:转载请注明出处】

时间: 2024-11-05 06:03:54

关于采集用户页面停留时长的一些思路的相关文章

阿里校招:前端线上笔试题--计算鼠标在页面某个区域内的停留时长

校招:阿里前端笔试题收到笔试通知后恶补了几天阿里前端历年笔试题,巧的是这道题今年有同学做过,而且发到了北邮人bbs上(看来临阵磨枪还是有用的),现在贴上当时提交的代码. 水平有限,有错误烦请指点. 题目: <div class='mod-spm'data-spmid='123'> <divclass='child_a'></div> <divclass='child_b'></div> <divclass='child_c'><

hive计算网页停留时长

hive表结构例如以下: create table pv_user_info( session_id string, user_id string, url string, starttime bigint ); 主要就是这几个字段实用.省略其它. 实现方式:userid和sessionid分组后并按时间降序排序,降序排序后.第一行就是该用户最后一次浏览的网页.最后一行是第一次浏览的网页,第一行的starttime和第二行的starttime相减就是第二行停留时间. 这里会有几个误差 用户最后一

用户在投时长及F、M指标的构造

import pandas as pdfrom datetime import datetimefrom math import ceil #向上取整from pandas import DataFramedata=pd.read_excel('./data/data5.xlsx',encoding='gbk',index_col='用户')print(data.head())data.describe(include='all')#构造R,F,M, recency距最近时间 frequency

js用img代替ajax js心跳 向服务器定时传送参数 主要计算用户在线时长

html: <!doctype html><html><head><meta charset="utf-8"><title>记录用户的在线时长</title></head> <body></body></html><script type="text/javascript"> var Statistics_Website_logo ={

scala实战之spark用户在线时长和登录次数统计实例

接触spark后就开始学习scala语言了,因为有一点python和java的基础学习起来还行,今天在这里把我工作中应用scala编程统计分析用户行为日志的实例和大家分析一下,我这里主要讲一下用户的在线时长统计和登录次数统计算法实现过程. 第一步 编程环境:首先你得有spark安装包 你可以先不用本地安装spark,但是可以通过import spark-assembly-1.6.2-hadoop2.6.0.jar包来完成程序调试 另外需要scala的运行环境,我用的版本:scala-sdk-2.

通话挂断后如何提示用户通话时长

InCallUI中,通话时会提示用户当前通话的时长.现有个客户需求:通话中,被测终端A能实时动态显示当前通话时间.挂断后,能显示该通话持续时间. 第一反应,在 src/com/android/incallui/InCallPresenter.java 的onDisconnect(Call) 方法中实现. final long callStart = call.getConnectRealTime();final long duration = SystemClock.elapsedRealtim

(二)仅仅通过Application监听用户行为及App的在线状态和在线时长

先要实现功能,还是先从API去找.看看有没有你想要的.这里其实就是监听App内activity的状态.怎么办? 给个API所在地址:http://www.android-doc.com/reference/android/app/Application.html 看到没?这里有个方法registerActivityLifecycleCallbacks ,这不是监听吗?看看回调了啥东西,点进去再看看. 我去,这服务不要太好呀.要啥有啥.看到没?所有activity的生命周期都能获取到.所以.怎么用

js读写Cookie问题(Cookie存储时长、Cookie存储域)汇总

在采集网站用户行为数据/使用js对用户行为做交互时,经常会使用到Cookie,了解Js Cookie的读写,以及一些细节,非常重要.   什么是Cookie 所谓Cookie,只是一条极为短小的信息,它被浏览器自动地放置在访问用户的电脑硬盘中. 例如:C:\Users\[user]\AppData\Roaming\Microsoft\Windows\Cookies 如上图所示,打开的一个文件里面,标示了一个域下多个Cookie的信息. 检测/判断浏览器是否支持Cookie 在绝大多数浏览器中,可

【Android端 APP 启动时长获取】启动时长获取方案及具体实施

一.什么是启动时长? 1.启动时长一般包括三种场景,分别是:新装包的首次启动时长,冷启动时长.热启动时长 冷启动 和 热启动 : (1)冷启动:当启动应用时,后台没有该程序的进程,此时启动的话系统会分配一个新的进程给应用. (2)热启动:程序的进程依然存在,启动时通过已有进程启动进入到Activity显示页面的,就是热启动,或者从Android官网来看我们获取到的其实是温启动时长,就是Activity不存在的情况. (3)新装包的启动时长: 新装包的启动时长,预估是最长的,并且在5.0以下及5.