代码之家  ›  专栏  ›  技术社区  ›  Alex

实现像Wordpress那样的后锁系统

  •  0
  • Alex  · 技术社区  · 7 年前

    我开始创建一个post锁定系统,这样当用户a编辑post X时,用户B就不能编辑它。我听说Wordpress也有类似的功能。我已经仔细研究了代码,但是我不太明白一件事。当用户退出浏览器或直接离开页面时,如何处理删除后锁?

    Wordpress似乎使用了他们称之为Heartbeat API的东西,这只是一个简单的服务器轮询器,它与admin-ajax.php通信,并处理诸如添加/删除post锁之类的事情。

    1. 用户停留在页面上(admin-ajax.php在预设间隔后触发,
    2. 3.用户直接从当前网站页面导航到其他网站 (admin-ajax.php未触发;但后锁已拆下)

    大体上,他们是如何实现第三个目标的?

    我排除了超时或无法连接到admin-ajax.php的可能,因为当我(作为当前编辑用户)停留在页面上,但在dev tools中将请求转为脱机时,尽管对admin-ajax.php的请求失败,post锁仍然保持打开(对其他用户来说是这样)。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Mike    7 年前

    在现代浏览器中 navigator.sendBeacon() 它将直接通知服务器用户正在离开页面,但是由于这是客户端的,因此它不是100%可靠的(例如,如果浏览器不支持它,突然网络或电源中断等)。这就是为什么如果您想让服务器端可靠,那么也有必要这样做。

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

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

    推荐文章