网站PV流量统计工具的实现

一, 概述

像CNZZ那样提供一段js代码然后帮助站长们统计网页的PV流量是如何实现的呢? 这里浅谈了一下实现方法, 其实很多网站内部的PV统计也是如此的, 只不过需要记录的数据比较多而已.

二, 需求

实现一个网站访问量统计工具, 能够得到被访问页面的URL, 被访问页面的前导URL, 以及访客所在地理位置.

三, 设计

分为两部分, 一是前端, 一是后端.

前端部分主要做一段js, 通过js动态创建一个<img>标签, 这时候会像统计的服务端发起一个http请求, 这个http请求就能得到当前的访问页面, 而http请求的url参数中可以传递当前页面的前导页面(referrer), 就能得到当前页面的前导页面, 而服务端可以获取到当前对该资源的请求者的IP地址, 这样通过IP地址库就能知道该用户位于哪个位置了.

后端部分, 主要是处理请求, 简单的话可以仅仅记录一条日志, 包括 refer, 资源的URL, 以及客户端的IP地址.

通过日志分析处理工具(大规模的话可以用hadoop集群), 得到用户访问的当前页面(对应的refer), 用户访问的前导页面(对应在资源URL的参数值里边, 用户的地理位置).

四, 实现.

用户先在系统中注册账号, 账号能够得到唯一码, 然后生成一段含有该唯一码的js代码, 为了在记录日志的时候可以验证是否是合法的统计.

js的伪代码如下:


var  uuid = 123456;  //唯一码

var ref = document.referrer;

var randnum = Math.random(); //防止缓存

var img_url = "http://www.pvloghost.com/1.gif?pre="+ref+"&uuid="+uuid+"&rnum="+randnum;

document.write("<img src='"+url+"' width='0px' height='0px' style='display:none;' />");

后端记录的伪代码如下:


String current = request.getRefer();

String hostname = request.getHostname();

String refer = request.getUrl().toURI().getParamValue("pre");

String uuid = request.getUrl().toURI().getParamValue("uuid");

String ipaddr = request.getIPAddr();

if( checkValidate(uuid,hostname) ){

logSys.warn(hostname+"\u0001"+refer+"\u0001"+current+"\u0001"+ipaddr);

}

日志分析的代码就省去了(简单的话可以用关系数据库来算, 但是数据量大起来需要用云计算平台)

分享到:

发表评论

昵称

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

沙发空缺中,还不快抢~