我着手创建一个帖子锁定系统,以便用户B编辑帖子X时,用户B无法对其进行编辑。我读到Wordpress具有类似的功能。我已经梳理过代码,但是我不太清楚一件事。当用户退出浏览器或直接离开页面时,他们如何处理删除后锁的问题?
Wordpress似乎使用了他们称为“ Heartbeat API”的东西,它只是一个简单的服务器轮询器,可与admin-ajax.php进行通信并处理诸如添加/删除后锁之类的事情。
所以我观察到了一些情况:
用户从页面导航到另一个wordpress页面(已触发admin-ajax.php,删除了后锁)
3。用户直接从当前网站页面导航到另一个网站 (未触发admin-ajax.php;但是删除了后锁)
广泛地说,他们如何获得第三名?
我排除了超时或无法连接到admin-ajax.php的原因,因为当我(作为当前编辑用户)停留在页面上但在开发工具中将请求转为离线时,后锁仍然保持(对其他用户显示),尽管对admin-ajax.php的请求失败。
答案 0 :(得分:1)
在现代浏览器中,我们有navigator.sendBeacon()
可以直接通知服务器用户正在离开页面,但是由于它是客户端,因此并非100%可靠(例如,如果浏览器不支持该页面) ,突然的网络或断电等)。这就是为什么如果您希望它在可靠性上也必须在服务器端进行。
心跳API的工作方式是用户的浏览器会向服务器发送“心跳”或ping通知服务器,使它们知道它们仍然存在,因此,如果用户离开页面,则不会收到任何心跳,因此用户离开页面。可以使用按设置的时间间隔运行的cron作业对此进行监视。因此,给定用户当前正在编辑的任何帖子,如果没有收到心跳超过一个间隔,则可以将其标记为未编辑。
显然,发送到服务器的心跳的间隔必须小于cron作业执行的间隔。