2013-02-21 72 views
4

我一直在考慮爲涉及的應用程序開發一些簡單的記錄鎖定。有幾個用戶會花費幾個小時來完成記錄的編輯。這在其他人想要對記錄進行更改時會導致問題。目前沒有涉及鎖定。PHP/MySQL/jQuery記錄的悲觀鎖定

我不確定樂觀鎖定在我的情況下是可靠的,因爲記錄是通過AJAX請求保存的。我正在考慮應用某種悲觀鎖定;使用兩個字段,例如,locking_user_idlocking_timestamp,我可以跟蹤誰有記錄打開和上次打開。

但是,由於用戶可能一次打開幾個小時,因此我怎麼能知道用戶是否放棄了它或正在努力工作?我不想強迫他們每5分鐘更新一次,但這可能是一種可能性(AJAX每5分鐘保存一次)。

也許一個jQuery過程可能會在用戶工作時計數,並且會每5分鐘觸發一次AJAX請求(getJSON)來更新locking_timestamp。這樣我就可以維護誰在製作唱片。在時間戳變爲「舊」後,我可以假設用戶不再使用reocrd。有沒有人有過這種鎖定的經驗?

+1

有趣!... – dynamic 2013-02-21 21:39:14

回答

3

使用AJAX請求更新locking_timestamp是一個很好的策略,並且可以很好地工作。

但是,通話間隔5分鐘似乎對我來說有點長。除非你有非常高的流量,否則從用戶的角度來看,30秒的效果會更好。想象一下,有人不得不等待5分鐘,因爲另一個用戶打開記​​錄,然後關閉他的瀏覽器...

+0

你有任何建議在jQuery代碼創建基於計數器的AJAX(更新locking_timestamp)?我確信這是以前完成的。 – jjwdesign 2013-02-22 18:36:26

+0

@jjwdesign,只需使用javascript的'setInterval'函數定期執行您的AJAX調用。 – linepogl 2013-02-22 20:15:21

1

也許我很愚蠢,但如何讓頁面上的jQuery監控鼠標和鍵盤事件。

PHP位置鎖定在文件系統的某個位置或數據庫條目上的某個標誌位,所以下一個用戶將無法編輯,只能查看信息。該文件將包含條目中的用戶信息,因此發送更改時只有他的更改被接受

雖然第一個用戶在頁面上有活動,但沒有任何反應。 3分鐘的用戶沒有做任何事情,他會被提示要麼確認他仍在工作,要麼他會在3分鐘內放鬆他目前的變化。如果他證實什麼都沒有發生,但是如果他沒有Ajax將會取消鎖定。

+0

我不確定我能否實現它,因爲很多此係統用戶在頁面上處理的速度很慢。其中大部分是研究相關的。但是,感謝這個概念的想法。 – jjwdesign 2013-02-22 02:05:21

1

如果你說用戶在提交記錄前可能需要幾個小時,那麼一個簡單的5分鐘鎖或其他任何東西都不足以滿足要求。

相反,您爲什麼不實現一種檢入/檢出功能,該功能在編輯記錄時被激活(檢出),並定期保持「活着」狀態,並被停用(簽入)當記錄保存/會話過期/瀏覽器關閉/等。