`
wangminshe89
  • 浏览: 690762 次
文章分类
社区版块
存档分类
最新评论

如何统计在线人数

 
阅读更多

如何统计在线人数

  在论坛里有人问我如何统计在线人数?我也不知道什么是最好的方法。下面是本站的实现的原理,我把
它写出来,供大家参考。这只是我的方法,肯定不是最好的,还希望高手们予以指正。

  其实,要真正统计同时在并发在线的人数,是一件不太现实的事,这是因为HTTP协议是种无状态的协议。
当客户端向服务器发出一个请求时,服务器会马上建立一个新的TCP/IP连接,在该会话结束后,如页面完全
载入后,这个连接就关闭了。一般来说,在线人数指的定是在一定时间段内同时访问站点的人数,而不是基
于HTTP协议的并发连接数。

  让我们先来看看一个访客是如何访问一个网站的。他在浏览器的地址栏里输入了目标网站的地址,然后
在一段时间内持续浏览该网站的网页,最后,关闭浏览器或输入新的网址——浏览结束了。对于服务器端来
说,访客到来是可以知道的,访客在浏览页面也是可以知道的,可是怎么知道什么时候走的呢?由于HTTP协
议是无状态的,所以无法知道。通常的做法是记下访客最后一次浏览站点页面的时间。如果该访客在一个特
定的时间内没有新的动作,那么可以认为他走了。

  根据上面的这个思路,我觉得最好用数据库,因为数据库要比其他方法如文本文件的效率要高。下面的
例子是使用MySQL的,很容易使用其他类型的数据库系统。然后,在所有的页面中调用这个PHP文件,一方面
更新数据,另一方面可以显示在线的人数。但是,有一个问题--到底在多长时间内访问的人算是并发的呢?
一般来说,是半个小时,也就是1800秒,具体的要根据网站的情况来确定。这个时间越长,统计出的并发在
线的人数就越多。本站的是15分钟,900 秒。用访问者的IP地址表示一个访问者是个不错的方法。在拨号上
网的情况下,被分配了相同IP地址的两个用户在短时间内浏览同一个网站的概率是很小的。

  首先,用MySQL的工具建一个表:

CREATE TABLE ccol(
id integer not null auto_increment, #记录的ID
ip char(15) not null, #访问者的IP地址
dtstamp datetime not null, #最后访问时间
uri char(255), #访问者请求的URI
primary key (id)
);


  然后,写一段PHP代码:


<?
/*
文件:ccol.php - ConCurrent OnLine statistics
目的:统计同时在线浏览的人数
作者:Hunte, hunte@phpuser.com
修改:2000-4-25
*/

$duration=1800;
require "db.php";
//包含DBSQL,详情可以参考我的另一篇文章
$ccol=new dbSQL;
$ccol->connect();
$ccol->query("DELETE FROM ccol WHERE (UNIX_TIMESTAMP(NOW())-UNIX_TIMESTAMP(dtstamp))>$duration");
//删除超过半小时的记录
$ccol->query("SELECT * FROM ccol WHERE ip='$REMOTE_ADDR'");
//判断当前的IP是否在该表中存在
if ($ccol->nf())//有?
{
$ccol->next_record();//下移找到的记录数组的指针
$id=$ccol->f('id');
$ccol->query("UPDATE ccol SET dtstamp=now(), uri='$REQUEST_URI' WHERE id=$id");
//设置最后访问时间和访问页面
}
else//没有
{
$ccol->query("INSERT INTO ccol VALUES (0, '$REMOTE_ADDR', now(), '$REQUEST_URI')");
}

$ccol->query("SELECT COUNT(*) AS ccol FROM ccol
WHERE (UNIX_TIMESTAMP(NOW())-UNIX_TIMESTAMP(dtstamp))<=$duration");
//找出在半个小时内的记录,后面的WHERE子句可有可无--超出时间的已经被删除了
$ccol->next_record()
echo "在线人数:", $ccol->f('ccol');
$ccol->free_result();
?>


怎么用呢?在站点的每个页面的上面调用这个程序,举例来说:

--index.php
...
<!--显示在线人数->
<?require ../stats/ccol.php3?>
...

  当然,这段代码还有改进的余地。例如,在每次调用是都要删除半小时前的记录,这是没有必要而且会
降低效率。可以一个什么办法过更长的时间再做,比如6小时。大家自个儿想想吧,我就不说了。

这种方法只要稍做修改,就可以派上别的用处,如SESSION的管理、网站的访问统计分析等。


__________________

这个,不好说!

分享到:
评论

相关推荐

    Spring boot通过HttpSessionListener监听器统计在线人数的实现代码

    在Spring boot中通过HttpSessionListener监听器统计在线人数是一种常见的技术实现方式,适用于需要跟踪和管理用户会话状态的Web应用程序。以下是从给定文件中提炼的关键知识点。 首先,了解HttpSessionListener接口...

    怎样使用asp.net c# 统计在线人数

    下面,我们将基于给定的代码片段,深入探讨如何在ASP.NET C#中统计在线人数。 ### 使用ASP.NET C#统计在线人数 #### 1. 初始化在线用户表 在给定的代码中,首先检查`System.Web.HttpContext.Current.Application`...

    统计在线人数与图表分析网站访问量

    统计在线人数与图表分析网站访问量说明书 主要功能 本系统能即时统计访问网站的在线人数。以图像形式显示某年某月访问量,并以百分比形式显示在图像上。 操作注意事项 用户在使用《统计在线人数与图表分析网站访问量...

    java统计在线人数

    在Java Web开发中,统计在线人数是一项常见的需求,它能够帮助我们了解系统当前的活跃用户量。本项目通过实现`HttpSessionListener`接口,每隔一分钟动态更新在线人数,提供了高效且可靠的解决方案。以下是对这个...

    PHP 统计在线人数

    在网站开发中,统计在线人数是一项常见的需求,可以帮助网站管理员了解网站的活跃度。PHP作为广泛使用的服务器端脚本语言,自然能够实现这一功能。以下将详细探讨如何使用PHP来统计在线人数。 首先,我们需要理解...

    asp.net统计在线人数

    在ASP.NET中,统计在线人数是一项常见的需求,用于分析网站的活跃度和用户参与度。这一功能主要依赖于会话管理、HTTP上下文以及数据库存储等技术。下面将详细讲解如何利用C#来实现这个功能。 首先,我们需要理解...

    统计在线人数ASP.NET+意外关闭

    在ASP.NET中,统计在线人数是一项常见的需求,用于获取网站当前活跃用户的数量。这涉及到Web应用程序的状态管理和用户会话管理。下面将详细讲解如何在ASP.NET中实现这一功能,以及如何处理程序意外关闭的情况。 ...

    session统计在线人数.rar

    **在线人数计数:Java Session统计实战** 在这个关于"session统计在线人数.rar"的压缩包中,包含了Java编程语言的一个示例项目,主要用于演示如何通过session对象来跟踪和统计网站或应用程序中的在线用户数量。Java...

    ASP.NET实现统计在线人数的程序 附源码

    在这个特定的场景中,我们讨论的是如何使用ASP.NET来实现一个统计在线人数的功能。这个功能通常在网站中用于追踪当前正在浏览网站的独立用户数量,为网站管理员提供关于用户活动的实时数据。 统计在线人数涉及到的...

    统计在线人数Appliaction

    在IT行业中,统计在线人数是一项常见的需求,尤其对于开发网络应用和服务的团队而言。这个"统计在线人数Appliaction"可能是一个专为此目的设计的软件工具或应用程序。下面我们将详细探讨统计在线人数的方法以及可能...

    JAVA jsp统计在线人数

    在Java JSP(JavaServer Pages)环境中,统计在线人数是一项常见的需求,这通常涉及到服务器端的会话管理、数据持久化以及实时性处理。这里我们将深入探讨如何利用JSP技术来实现这一功能。 首先,我们需要理解JSP的...

    统计在线人数

    在网站开发中,统计在线人数是一项常见的需求,它可以帮助管理员了解网站的活跃度,优化服务器资源分配,或者作为衡量网站影响力的数据之一。本教程将详细讲解如何实现“统计在线人数”这一功能,主要关注Global....

    JavaWeb 用session统计在线人数

    在JavaWeb开发中,"用session统计在线人数"是一个常见的需求,主要应用于网站或应用的实时用户活动监控。本文将详细解析如何利用session这一核心技术来实现这个功能。 首先,理解session的基本概念。在Web开发中,...

    同时统计在线人数的c#代码

    从给定的文件信息来看,这段C#代码主要涉及了如何在Web应用中统计并显示在线人数,同时通过图像的方式直观地展示当前的在线人数。下面将详细解析这段代码的关键部分,以及它所涵盖的IT知识点。 ### 统计在线人数的...

    springboot 用监听器统计在线人数案例分析

    本文通过对Spring Boot用监听器统计在线人数案例的分析,详细介绍了实现该功能的步骤和注意事项。 首先,要实现该功能,我们需要创建一个实现了HttpSessionListener接口的监听器类。在Spring Boot中,可以通过在...

    netty-socket实时在线人数统计

    本文将深入探讨如何使用SpringBoot 2.0与Netty-socket来实现一个实时在线人数统计的功能,并涉及到WebSocket协议的相关知识。 **SpringBoot 2.0** SpringBoot是Spring框架的一个轻量级容器,它简化了Spring应用...

    在线和实时统计在线人数

    在线和实时统计在线人数是网络应用中常见的需求,特别是在社交平台、在线教育或者游戏服务器等场景下,了解当前有多少用户在线对于系统优化、资源分配以及用户体验都有重要意义。在这个话题中,我们将深入探讨如何...

    java web 统计在线人数

    在Java Web开发中,统计在线人数是一项常见的需求,它能够帮助我们了解网站或应用的实时活跃用户数量。这里我们将深入探讨如何实现这一功能。 首先,我们需要理解“在线人数”的定义。通常,它指的是在一定时间窗口...

    在线人数统计程序(JSP)

    在线人数统计程序是Web开发中一个常见的功能,用于实时显示网站当前在线用户的数量。这个程序通常基于服务器端的技术实现,例如JavaServer Pages (JSP)。JSP是一种动态网页技术,它允许开发者在HTML页面中嵌入Java...

    统计在线人数的小程序.zip

    标题中的“统计在线人数的小程序”指的是一个用于计算并显示网站实时在线用户数量的应用程序。这类小程序通常由ASP(Active Server Pages)编写,这是一种微软开发的服务器端脚本语言,用于生成动态网页。在给定的...

Global site tag (gtag.js) - Google Analytics