所以基本上,我不希望userB在文本字段上写,而userA正在写它。
更具体:我想知道如何避免userB在写入文本字段时开始写入文本字段,所以我们可以说我们可以在userA和userB之间添加延迟。 userA可以写入一段时间,当该时间结束时,userB可以在文本字段上键入,而userA则不能。等等..
我很感激你的帮助!
答案 0 :(得分:2)
"Pessimistic Locking prevents any other application or user from fetching or updating the same record at the same time."
http://c2.com/cgi/wiki?PessimisticLocking
"OptimisticLocking assumes you will be the only one changing the target. If there is a transaction conflict, the conflict could be resolved in one of several ways"
http://c2.com/cgi/wiki?OptimisticLocking
防止方法(悲观锁定)的一个问题是userA可能让userB永远等待。这可以防止userB工作。可能会觉得你阻止他们失去工作,但他们做了一些工作决定编辑和规划说什么。现在你已经失去了所有仍在他们头脑中的工作。让人们说出他们想要快速说出的话是让他们投资于你的过程的好方法。
最后胜利(乐观锁定)会产生来自userA的数据丢失的问题,wiki会通过记录每个更改来解决这个问题,并通知用户B他们的读取在他们允许继续写入之前是陈旧的。此时userB决定合并,覆盖或放弃自己的更改。这促使客户及时了解他们的变化。优点是系统永远不会停止工作。没有等待。当你变得缓慢或不幸时,变得更难做出改变。
很难告诉你哪个更适合你,因为你的用例是"一个文本框"对于单个字段或整个文档,它可以是单个单词值。哪种方法更好取决于它将如何被使用以及如何使用。但是,我会说乐观锁定是一种增长趋势。
如果您坚持使用悲观锁定,那么通过提供更多信息而不仅仅是锁定,您可以减少用户体验。您可以通知userB userA锁定该字段的时间。当userA最后触摸一个键(使用AJAX方法)时,userA是谁,以及系统将超时用户A锁定并释放该字段的时间。
如果这个系统面向互联网,请仔细考虑如果用户A没有将您的系统最佳利益放在心上会发生什么。锁定和停止将是一种轻松的拒绝服务攻击方式。
答案 1 :(得分:0)
对于candiedorange和OP,在这种情况下使用布尔值不会更简单,你可以设置一个变量来表示元素是在使用还是时间戳(更容易imo)允许用户键入数秒,一旦该时间用完,当前用户的布尔值为false,下一个布尔值为true。