2011-11-09 58 views
1

我在寻找保持我的网站上用户数近实时计​​算的最佳方法。这是在LAMP环境中,我想要构建一个在前端使用JavaScript并在后端使用PHP/MySQL的解决方案。我的最终目标是创建一个每个活动用户都有记录的MySQL表。现场活跃用户数量

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

我的问题是:如果我为每个活动用户创建一个php会话,如果存在例如1,000个连接的用户,这会在普通VPS上导致性能问题吗?是否有更好的方式为每个用户创建一个独特的记录(即为用户背后的NAT计费)而不创建PHP会话?

+0

在http://serverfault.com/上也可能会问这个问题 – DesignerGuy

+0

创建会话相当轻量。阿贾克斯心跳将是一个更大的问题。 –

+1

这可能值得阅读:http://www.devarticles.com/c/a/PHP/The-Quickest-Way-To-Count-Users-Online-With-PHP/1/ – Smamatti

回答

1

除非你存储在会话变量中的海量数据,任何标准的VPS应该能够很容易地处理1K会议。默认情况下,PHP将会话存储在磁盘上 - 如果您觉得磁盘I/O正在消耗脚本的速度,请考虑编写自定义会话处理程序以将会话存储在数据库(如MySQL)中,以减少I/O滞后。如果你已经为每个用户在MySQL中存储了一条记录,这不是太多步骤。

0

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

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

因此,您的cron每分钟计数上次活动时间少于5分钟的用户的数量,然后将其写入一个简单文件。就像js文件一样,如果你愿意的话也可以使用PHP。

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

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

1

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

这个问题可能证明是有用的:Find Number of Open Sessions