PHP / MySQL / jQuery悲观锁定记录

我一直在考虑为我参与的应用程序开发一些简单的记录锁定。有一些用户需要花费数小时才能完成对记录的编辑。 当其他人想要对记录进行更改时,这会导致问题。 目前没有涉及锁定。

在我的情况下,我不确定乐观锁定是否可靠,因为记录是通过AJAX请求保存的。 我正在考虑应用某种悲观锁定; 使用两个字段,例如locking_user_idlocking_timestamp ,我可以跟踪打开记录的人和上次打开记录的人。

但是,由于用户可能一次打开几个小时,我怎么知道用户是放弃它还是只是努力工作? 我不想强迫他们每5分钟更新一次〜但这可能是一种可能性(AJAX每5分钟保存一次)。

也许jQuery进程可以在用户工作时进行计数,并且每5分钟发出一次AJAX请求(getJSON)来更新locking_timestamp。 这样我就可以保持谁在制作唱片。 在时间戳变为“旧”之后,我可以假设用户不再使用reocrd。 有没有人有这种锁定的经验?

使用AJAX请求更新locking_timestamp是一个很好的策略,并且可以正常工作。

但是,电话间隔5分钟对我来说似乎有点长。 除非你有非常高的流量,否则从用户的角度来看,30秒就会更好。 想象一下,有人必须等待5分钟,因为另一个用户打开了记录,然后关闭了他的浏览器……

也许我很傻但是如何让jQuery监控页面上的鼠标和键盘事件。

PHP将锁定放在文件系统中的某个位置或数据库条目上的某个标志位,这样下一个用户将无法编辑,只能查看信息。 该文件将包含条目中的用户信息,因此当发送更改时,只接受其更改

当第一个用户在页面上有活动时没有任何反应。 3分钟的用户没有做任何事情,他将被提示确认他仍在使用它,否则他将在3分钟内失去当前的变化。 如果他确认没有任何反应,但如果他没有Ajax将取消锁定。

如果你说用户可能需要几个小时才能提交记录,那么一个简单的5分钟锁定或任何不足够的。

相反,为什么不实施一种签入/签出function,该function将在编辑记录时激活(签出)并定期“保持活动”,并在记录时停用(签入)已保存/会话已过期/浏览器已关闭/等