0

我希望显示我网站用户的在线状态。我不需要显示上次活动的确切时间。但肯定会显示用户过去是否有任何活动,比如 5-10 分钟。

我在考虑创建这个系统时遇到的问题如下:

  • 如果我要使用 onlineUsers 创建一个 sql 表,并在每个特定页面或每个 x 页上更新表(以防止过多的 sql 更新),那肯定会给我一个非常精确的自上次活动以来的分钟数。但这会导致与数据库的连接过多,最终会降低网站速度。

  • 我可以通过制定一些智能方程式以某种方式最小化这个问题,只让用户更新他们的 onlineUsers 行,每次点击 100 页,这不需要太多 php 资源,但这仍然是一种脾气暴躁的方式。

  • 我还可以以某种方式集成某种作物列表系统,每 10 分钟检查一次哪些用户在线,并更新所有表格。但我不确定这将如何解决,如何检查哪些用户在过去 10 分钟内完全处于活动状态,而实际上没有使用他们的 id 更新任何表行。

那好吧。我确信这样的系统之前已经制作了数百次。所以应该有人能够告诉我制作这样一个系统的最佳方法,这将需要尽可能少的数据库资源。

  • 编辑 * 我正在使用 Cookie 来设置用户登录。

谢谢您的帮助 :)

4

1 回答 1

1

通常使用的方法是向用户表中添加一列,该表last_activity在页面加载时更新。这是您可能设法创建的最简单、最可靠的方法。

为了加快速度,您可以创建一个会话变量来保存您上次更新活动列的时间。您可以读取每个用户的信息并检查最后一次更新是否太远(比如说 3 分钟),然后在那个时候更新。如果用户在一分钟内刷新页面 100 次,这将避免 100 次数据库调用/分钟。

我可以通过制定一些智能方程式以某种方式最小化这个问题,只让用户更新他们的 onlineUsers 行,每次点击 100 页。

通过 page click 我假设您的意思是page requests。恕我直言,这不是一个坏主意:如果用户每 8 分钟在一段时间内加载页面 3 次,则每个请求都应该更新。

我还可以以某种方式集成某种作物列表系统,每 10 分钟检查一次哪些用户在线,并更新所有表格。但我不确定这将如何解决,如何检查哪些用户在过去 10 分钟内完全处于活动状态,而实际上没有使用他们的 id 更新任何表行。

那只是矫枉过正。

于 2013-02-19T00:26:32.430 回答