PHP该如何统计各页面访问时长?

5 715
大黑牛 2017-11-7发布
签名:欢迎访问徕问社区!

如题,想做一个监控系统,统计各页面被访问的时长,用ajax轮询的访问一个脚本的话并发量高的时候撑不住,请教各位可有合适的方法或思路。

打赏我,让我更有动力~

收藏   0 | Support  0 | Against  0
  • lvphp
    2017-11-7

    利用websocket,每个页面开一个websocket连到服务端,然后页面将页面信息(哪个页面)传递给服务端(服务端开始计时),当页面关闭时,这个页面的websocket也随之关闭,这是服务端时能检测到的,然后服务端计算这个websocket存活时间,这个时间是非常准确的。

    如果你会PHP的话可以用workerman来做,应该就几行代码就搞定了。就是在
    websocket创建链接会触发Event::onGatewayConnect,里面记录个时间到session $_SESSION['start_time']=time()

    链接建立后传递个页面url(用来判断是哪个url的websocket链接),在Event::onMessage里面做,同样是存到session中 $_SESSION['url']=xxx

    链接关闭时会触发Event::onClose,这个方法里面得到时间差值(非常精确),time()-$_SESSION['start_time']

    就这么简单,另外不用担心客户端不支持websocket,worerkman里面的websocket只要浏览器支持html5或者flash任意一种就可以。


    3 回复帖子

    评论列表

    • 加载数据中...

    编写评论内容
  • 牵手相依
    2017-11-7

    页面访问时间不一定就是页面打开的时间,如果用户打开一个页面,然后打开了一个新窗口的链接,源页面没有关、就一直开着,这是否也算访问时间呢?
    所以,一般的做法是记录下用户每次打开页面的时间,两次打开页面的间隔时间一般就是访问时间

    0 回复帖子

    评论列表

    • 加载数据中...

    编写评论内容
  • 看了上面的答案,深有所得,说说自己的想法。

    本质上这种需求,也是很多系统的用户在线状态处理是相同的。

    如果对精准度要求不太高,采用ajax应该就不错,这种请求在当下高并发的实现,压力并不大,这也是当前很多系统采用的方法。

    如果有较高的需求,就是借用楼上一个关于websocket的解决方案,你也可以用node.js 实现一个socket来维护页面访问时长。


    0 回复帖子

    评论列表

    • 加载数据中...

    编写评论内容
  • 打开页面立即用javascript计时,然后在onbeforeunload事件内通过ajax将当前页面id与时间提交给后台

    0 回复帖子

    评论列表

    • 加载数据中...

    编写评论内容
  • 一般都是通过分析web服务器日志,记录日志的方式可以是js的ajax请求或者1像素的图片

    定期通过脚本分析日志得出某个页面的停留时间,不过最后一个访问的页面统计会有一些难度,因为不能确定离开的方式


    0 回复帖子

    评论列表

    • 加载数据中...

    编写评论内容
Login | Register Can Publish Content

精美音乐推荐

最近热帖
window + php 安装redis扩展 0
返回顶部