簡體   English   中英

在其他用戶提供輸入時,如何防止其他用戶進行交互?

[英]How do I prevent another user interacting while other user is providing input?

所以基本上,我不希望userB在文本字段上寫,而userA正在寫它。

更具體一點:我想知道如何避免userB在寫入文本字段時開始寫入文本字段,所以假設我們可以在userA和userB之間添加延遲。 userA可以寫入一段時間,當該時間結束時,userB可以在文本字段上鍵入,而userA則不能。 等等..

我很感激你的幫助!

"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是誰,以及系統將超時userA的鎖定並釋放該字段的時間。

如果這個系統面向互聯網,請仔細考慮如果用戶A沒有系統最佳利益的話會發生什么。 鎖定和停止將是一種輕松的拒絕服務攻擊方式。

為了響應candiedorange和OP,在這種情況下使用布爾值不會更簡單,你可以設置一個表示元素是否正在使用的變量或者允許用戶輸入的時間戳(更容易的imo)秒數,一旦該時間用完,對於當前用戶,布爾值為false,對於下一個用戶,布爾值為true。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM