如何在没有数据库的情况下显示当前在线用户?或者至少非常有效.最好是PHP


How can I display currently online users, without a database? Or at least very efficiently. Preferably in PHP

这个问题对我来说已经有一段时间了。抱歉,如果我写了很多,我只是想弄清楚我已经尝试过的内容等。

我将尽可能简单地解释我的问题的想法,因为复杂性是无关紧要的。我们在任何时候都可能有多达 80-90 个用户在网站上。他们可能都会访问同一个页面,我称之为result.php。但是,他们将通过 ID 的 get 变量访问不同的结果(result.php?ID=456)。在任何时候,单个记录中可能少于 3 或 4 个用户,并且有超过 10000 条记录。

我需要知道,误差幅度小于 20-25 秒(这非常重要),谁在该页面上的特定 ID 上,并相应地更新页面。一旦他们的名字不再出现在页面上,就尽快删除他们的名字。

目前,我正在使用一个jQuery脚本,该脚本调用一个php文件,从正在访问此特定ID的"当前正在访问"用户名的数据库中读取,并且仅当他们访问它的日期在过去25秒内时。该文件还将删除所有超过 5 分钟的条目,以保持表格整洁。

对于 20 或 30 个用户来说,这还可以,但现在负载增加了一倍多,我注意到这是一种特别慢的方法。

我还可以使用哪些其他方法?有没有人在类似情况下有过任何经验?

我们目前使用的所有内容都是用PHP编写的,带有一点jQuery。如果这很重要,我们正在由托管公司管理的异地服务器上运行。

我遇到了一种叫做彗星或彗星服务器的东西,听起来它可能会有所帮助,但对于我的目的来说,它听起来也非常复杂,远远超出了我目前的理解范围。

查看 websocket 以获取实时套接字连接。您可以使用 websocket 实时推送更新(而不是轮询),以确保在几毫秒内发送"当前在线用户"的更改。

您想要的是一个内存中缓存,其中包含维护站点活动状态的服务层。使用 memcached 可能是一个很好的起点。您的伪代码如下所示:

  • 在页面访问时,调用当前用户服务
  • CurrentUserService将您正在访问的页面和您是谁作为参数。
  • 每次调用它时,它都会从缓存中删除您之前访问的任何内容。
  • 然后,它会添加您当前正在访问的内容。
  • 然后,它会根据缓存中的当前状态编译一个列表,列出还有谁正在访问相同的内容。
  • 它返回此列表,您的页面将处理并显示该列表。

如果您记录某人访问页面的时间,则可以设置服务停止"计入"他们访问页面的超时时间。

相关文章: