|
![]() |
名片设计 CorelDRAW Illustrator AuotoCAD Painter 其他软件 Photoshop Fireworks Flash |
|
在论坛里有人问我如何统计在线人数?我也不知道什么是最好的方式。下面是本站的实现的原理,我把它写出来,供大家参考。这只是我的方式,肯定不是最好的,还希望高手们予以指正。 其实,要真正统计同时在并发在线的人数,是一件不太现实的事,这是因为HTTP协议是种无状态的协议。当客户端向服务器发出一个哀求时,服务器会立刻建立一个新的TCP/IP连接,在该会话结束后,如页面完全载入后,这个连接就关闭了。一般来说,在线人数指的定是在一定时间段内同时访问站点的人数,而不是基于HTTP协议的并发连接数。 让我们先来看看一个访客是如何访问一个网站的。他在浏览器的地址栏里输入了目标网站的地址,然后在一段时间内持续浏览该网站的网页,最后,关闭浏览器或输入新的网址――浏览结束了。对于服务器端来说,访客到来是可以知道的,访客在浏览页面也是可以知道的,可是怎么知道什么时候走的呢?由于HTTP协议是无状态的,所以无法知道。通常的做法是记下访客最后一次浏览站点页面的时间。假如该访客在一个特定的时间内没有新的动作,那么可以认为他走了。 根据上面的这个思路,我觉得最好用数据库,因为数据库要比其他方式如文本文件的效率要高。下面的例子是使用MySQL的,很轻易使用其他类型的数据库系统。然后,在所有的页面中调用这个PHP文件,一方面更新数据,另一方面可以显示在线的人数。但是,有一个问题--到底在多长时间内访问的人算是并发的呢?一般来说,是半个小时,也就是1800秒,详细的要根据网站的情况来确定。这个时间越长,统计出的并发在线的人数就越多。本站的是15分钟,900秒。用访问者的IP地址表示一个访问者是个不错的方式。在拨号上网的情况下,被分配了一样IP地址的两个用户在短时间内浏览同一个网站的概率是很小的。 首先,用MySQL的工具建一个表: CREATE TABLE ccol( 然后,写一段PHP代码: <? $duration=1800; $ccol->query("SELECT COUNT(*) AS ccol FROM ccol WHERE (UNIX_TIMESTAMP(NOW())-UNIX_TIMESTAMP(dtstamp))<=$duration"); 怎么用呢?在站点的每个页面的上面调用这个程序,举例来说: 当然,这段代码还有改进的余地。例如,在每次调用是都要删除半小时前的记录,这是没有必要而且会降低效率。可以一个什么办法过更长的时间再做,比如6小时。大家自个儿想想吧,我就不说了。 这种方式只要稍做修改,就可以派上别的用处,如SESSION的治理、网站的访问统计分析等。 --欢迎高手指正! 返回类别: 教程 上一教程: phpMyAdmin2.6以上版本数据乱码问题 下一教程: 模仿OICQ的实现思路和核心程序(一) 您可以阅读与"PHP如何统计在线人数"相关的教程: · 利用文件属性结合Session实现在线人数统计 · 显示当前在线人数 · 网站当前的在线人数 · 用IP地址来统计访问人数!以天为间限! · 如何准确统计中文字数? |
![]() ![]() |
快精灵印艺坊 版权所有 |
首页![]() ![]() ![]() ![]() ![]() ![]() ![]() |