繁体   English   中英

实现类似于Wordpress的帖子锁定系统

[英]Achieve post locking system like that of Wordpress

我着手创建一个帖子锁定系统,以便用户B编辑帖子X时,用户B无法对其进行编辑。 我读到Wordpress具有类似的功能。 我已经梳理过代码,但是我不太清楚一件事。 当用户退出浏览器或直接离开页面时,他们如何处理删除后锁的问题?

WordPress似乎使用了他们称为“ Heartbeat API”的东西,它只是一个简单的服务器轮询器,可与admin-ajax.php进行通信并处理诸如添加/删除后锁的操作。

因此,我观察到一些情况:

  1. 用户停留在页面上(在预设时间间隔后触发admin-ajax.php,更新了后锁)
  2. 用户从页面导航到另一个wordpress页面(已触发admin-ajax.php,删除了后锁)

    3.用户直接从当前网站页面导航到另一个网站(未触发admin-ajax.php;但是删除了后锁)

从广义上讲,他们如何实现第三名?

我排除了超时或无法连接到admin-ajax.php的原因,因为当我(作为当前编辑用户)停留在页面上但在开发工具中将请求转为离线时,发布锁仍然保持(如其他情况所示)用户),尽管对admin-ajax.php的请求失败。

在现代浏览器中,我们具有navigator.sendBeacon() ,它将直接通知服务器用户正在离开页面,但是由于这是客户端,因此并不是100%可靠的(例如,如果浏览器不支持该页面,则网络突然启动)或停电等)。 这就是为什么如果您希望它在可靠性上也必须在服务器端进行。

心跳API的工作方式是用户的浏览器会向服务器发送“心跳”或ping命令,使其知道它们仍然存在,因此,如果用户离开该页面,则不会收到任何心跳,因此用户已离开该页面。 可以使用按设置的时间间隔运行的cron作业对此进行监视。 因此,给定用户当前正在编辑的,未收到心跳超过一个间隔的任何帖子都可以标记为未编辑。

显然,发送到服务器的心跳的间隔必须小于cron作业执行的间隔。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM