现场活跃用户数

时间:2011-11-09 21:49:01

标签: php mysql session

我正在寻找最好的方法来近乎实时地记录我网站上的用户数量。这是在LAMP环境中,我想构建一个在前端使用JavaScript而在后端使用PHP / MySQL的解决方案。我的最终目标是拥有一个MySQL表,其中包含每个活动用户的记录。

我目前收集该信息的想法是在每个运行AJAX请求的页面上包含一段javascript,然后为该用户创建记录。为了确保每个用户都有一个唯一的记录,我计划为每个用户创建一个PHP会话。

我的问题是:如果我为每个活跃用户创建一个php会话,如果有1000个连接用户,这是否会导致普通VPS出现性能问题?是否有更好的方法可以为每个用户创建一个唯一的记录(即,考虑NAT后面的用户)而不创建PHP会话?

3 个答案:

答案 0 :(得分:1)

我发现获得估计数量的开放会话的最简单方法是计算session_save_path()返回的目录中的文件数量,但这并不是一个精确的科学很好地指示有多少个开放会话,而无需将会话保存处理程序更改为数据库或其他机制。

这个问题可能有用:Find Number of Open Sessions

答案 1 :(得分:1)

除非您在会话变量中存储大量数据,否则任何标准VPS都应该能够轻松处理1k会话。 PHP默认情况下将会话存储在磁盘上 - 如果您认为磁盘I / O会破坏脚本的速度,请考虑编写自定义会话处理程序来存储数据库(如MySQL)中的会话,以减少I / O延迟。如果您已经在MySQL中为每个用户存储了一条记录,那么这不是太多的步骤。

答案 2 :(得分:0)

我会在每分钟都更新的cron上运行它。

在您的用户表中,您可以存储在页面加载时更新的最后一个活动字段。如果最后一个活动字段超过5分钟,则认为它们已经消失而不是在线。

因此,您的cron每分钟计算上次活动时间少于5分钟的用户数,然后将其写入简单文件。就像你喜欢的js文件或PHP。

通过这种方式,您可以对该文件进行ajax调用并获得简单的输出,而不是对每个请求运行查询。如果没有实际开销,那么用户数量应该是相当无关紧要的。

这也取决于你的需求。我假设您正在使用ajax调用,因为您希望能够在屏幕上实时增加数字,而不仅仅是每次加载页面。