2

一段时间以来,这个问题一直是我的脑筋急转弯。抱歉,如果我写了很多,我只是想清楚我已经尝试过的内容等。

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

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

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

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

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

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

我遇到了一个叫做 Comet 或 Comet Server 的东西,听起来它可能会有所帮助,但对于我的目的来说,这听起来也非常复杂,而且远远超出了我目前的理解。

4

2 回答 2

1

Look into websockets for a realtime socket connection. You could use websockets to push out updates in real time (instead of polling) to ensure changes in the 'currently online users' is sent within milliseconds.

于 2012-06-05T23:59:01.993 回答
0

你想要的是一个内存缓存,它有一个服务层来维护站点上的活动状态。使用memcached可能是一个很好的起点。您的伪代码将类似于:

  • 在页面访问时,调用 CurrentUserService
  • CurrentUserService 将您正在访问的页面和您的身份作为参数。
  • 每次调用它时,它都会从缓存中删除您之前访问的任何内容。
  • Then it adds what you're currently accessing.
  • Then it compiles a list of who else is accessing the same thing based on the current state in the cache.
  • It returns this list, which your page processes and displays.

If you record when someone accesses a page, you can set a timeout for when the service stops 'counting' them as accessing the page.

于 2012-06-05T23:53:02.347 回答