Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果没有数据库,如何显示当前在线用户?或者至少非常有效。最好用PHP_Php_Jquery_Performance - Fatal编程技术网

如果没有数据库,如何显示当前在线用户?或者至少非常有效。最好用PHP

如果没有数据库,如何显示当前在线用户?或者至少非常有效。最好用PHP,php,jquery,performance,Php,Jquery,Performance,这个问题对我来说是一个相当棘手的问题。道歉如果我写了很多,我只是想弄清楚我已经尝试了什么等等 我将尽可能简单地解释我的问题的想法,因为复杂性是非常不相关的。 我们可能有多达80-90个用户在该网站上的任何时间。他们很可能都访问同一个页面,我称之为result.php。但是,他们将通过ID的get变量(result.php?ID=456)访问不同的结果。在任何时候,单个记录上的用户可能少于3或4个,并且记录数可能超过10000个 我需要知道,在不到20-25秒的误差范围内(这非常重要),谁在该页面

这个问题对我来说是一个相当棘手的问题。道歉如果我写了很多,我只是想弄清楚我已经尝试了什么等等

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

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

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

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

我还可以用什么方法?有没有人有过类似的经历

我们目前使用的所有东西都是用PHP编写的,带有一个小jQuery。我们运行的服务器由托管公司进行异地管理,如果有必要的话


我遇到过一种叫做Comet或Comet服务器的东西,听起来可能会有所帮助,但就我的目的而言,它听起来也非常复杂,远远超出了我目前的理解。

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

  • 在页面访问中,调用CurrentUserService
  • CurrentUserService将您正在访问的页面和您是谁作为参数
  • 每次调用它时,它都会从缓存中删除以前访问的内容
  • 然后添加您当前正在访问的内容
  • 然后,它根据缓存中的当前状态编译一个列表,列出其他正在访问同一事物的人
  • 它返回此列表,您的页面将处理并显示该列表

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

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

您需要一个数据库来完成此操作。您是如何查询数据库的?您使用什么jQuery从数据库中插入/删除用户?@Blender您不需要数据库。事实上,由于db在读或写上都会有很大的开销,所以这可能不是一个好主意。最好将其缓存在所有php进程都可以访问的内存中。