4

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

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

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

也许一个 jQuery 进程可以在用户工作时计数,并且每 5 分钟触发一个 AJAX 请求 (getJSON) 以更新locking_timestamp。这样我就可以维护谁在记录中工作。在时间戳变“旧”之后,我可以假设用户不再使用 reocrd。有没有人有过这种锁定的经验?

4

3 回答 3

3

使用 AJAX 请求更新locking_timestamp 是一个很好的策略,并且效果很好。

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

于 2013-02-21T21:23:36.393 回答
1

也许我很傻,但是让 jQuery 监视页面上的鼠标和键盘事件怎么样。

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

当第一个用户在页面上有活动时,没有任何反应。用户在 3 分钟内没有做任何事情,系统将提示他确认他仍在处理它,或者他将在 3 分钟内放弃他当前的更改。如果他确认没有任何事情发生,但如果他不确认,Ajax 将解除锁定。

于 2013-02-21T21:34:18.830 回答
1

如果您说用户可能需要几个小时才能提交记录,那么简单的 5 分钟锁定或其他任何方法都不够。

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

于 2013-02-21T21:46:45.423 回答