如果没有数据库,如何显示当前在线用户?或者至少非常有效。最好用PHP
这个问题对我来说是一个相当棘手的问题。道歉如果我写了很多,我只是想弄清楚我已经尝试了什么等等 我将尽可能简单地解释我的问题的想法,因为复杂性是非常不相关的。 我们可能有多达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。我们运行的服务器由托管公司进行异地管理,如果有必要的话如果没有数据库,如何显示当前在线用户?或者至少非常有效。最好用PHP,php,jquery,performance,Php,Jquery,Performance,这个问题对我来说是一个相当棘手的问题。道歉如果我写了很多,我只是想弄清楚我已经尝试了什么等等 我将尽可能简单地解释我的问题的想法,因为复杂性是非常不相关的。 我们可能有多达80-90个用户在该网站上的任何时间。他们很可能都访问同一个页面,我称之为result.php。但是,他们将通过ID的get变量(result.php?ID=456)访问不同的结果。在任何时候,单个记录上的用户可能少于3或4个,并且记录数可能超过10000个 我需要知道,在不到20-25秒的误差范围内(这非常重要),谁在该页面
我遇到过一种叫做Comet或Comet服务器的东西,听起来可能会有所帮助,但就我的目的而言,它听起来也非常复杂,远远超出了我目前的理解。你想要的是一个内存缓存,带有一个维护站点活动状态的服务层。使用可能是一个很好的起点。您的伪代码类似于:
- 在页面访问中,调用CurrentUserService
- CurrentUserService将您正在访问的页面和您是谁作为参数
- 每次调用它时,它都会从缓存中删除以前访问的内容
- 然后添加您当前正在访问的内容
- 然后,它根据缓存中的当前状态编译一个列表,列出其他正在访问同一事物的人
- 它返回此列表,您的页面将处理并显示该列表
如果您记录某人访问页面的时间,您可以设置服务停止“计数”他们访问页面时的超时。查看实时套接字连接。您可以使用WebSocket实时推送更新(而不是轮询),以确保在毫秒内发送“当前在线用户”中的更改 您需要一个数据库来完成此操作。您是如何查询数据库的?您使用什么jQuery从数据库中插入/删除用户?@Blender您不需要数据库。事实上,由于db在读或写上都会有很大的开销,所以这可能不是一个好主意。最好将其缓存在所有php进程都可以访问的内存中。