【问题标题】:Number of Active Users On Site现场活跃用户数
【发布时间】:2011-11-09 21:49:00
【问题描述】:

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

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

我的问题是:如果我为每个活动用户创建一个 php 会话,如果有 1,000 个连接的用户,这是否会导致普通 VPS 的性能问题?有没有更好的方法在不创建 PHP 会话的情况下为每个用户创建一个唯一记录(即考虑 NAT 后面的用户)?

【问题讨论】:

标签: php mysql session


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

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

      这样,您可以对该文件进行 ajax 调用并获得简单的输出,而不是对每个请求都运行查询。如果没有真正的开销,那么用户数量应该是无关紧要的。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-11-12
        • 1970-01-01
        • 2013-02-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多