我正在研究類似於pastebin的東西(是的,它的即泛型),但允許多用戶編輯。顯而易見的問題是多個用戶試圖編輯同一個文件。我正在考慮鎖定文件,當一個用戶正在處理它(這不是最好的解決方案,但我不需要太複雜),但爲了防止/警告用戶,我顯然需要一個系統監視每個用戶的編輯會話。使用數據庫和ajax,我想到了兩種解決方案。監控用戶會話以防止編輯衝突
第一種方法是讓編輯頁以任意間隔(例如一分鐘)ping服務器,並且它會更新db中的編輯會話條目。然後下一次腳本請求進行編輯,它會檢查最近的ping,如果最近一次是另一個任意時間,比如說五分鐘,那麼我們假設前一個用戶已經退出,並且可以再次編輯該文件。當然,這種方法的問題是,前一個用戶已經退出的假設只是一個假設。他可能會有片狀的Wi-Fi連接,並且隨着窗戶仍然打開,隨時都會退出十分鐘。
當然,爲了處理這個問題,我們必須讓服務器響應來自之前關閉會話的新請求併發出錯誤,告訴客戶端指出用戶他的會話已經結束,然後通過將它另存爲服務器上的另一個文件並要求用戶手動合併它等等來處理它。不用說,這對最終用戶來說是相當可怕的。
所以我想出了另一種解決方案。當用戶的會話結束時,可能會觸發unload
事件,但我無法確定這是否可以可靠地工作。
有沒有人有任何其他更優雅的解決方案來解決這個問題?
這是一個很好的答案,但它確實不是我想要的:協作編輯部分對於共享部分來說確實很小,對不起,如果我沒有說清楚。採用這種解決方案會使事情變得更復雜 - 對於簡單的文本/代碼共享應用來說太複雜了。考慮到這裏用戶交互的複雜性,我需要考慮的邊緣情況的數量是......完全不可能的。還是很好的回答,當我等待下一個答案的時候,給了我一些思考。 – 2010-08-23 10:40:08