2010-08-27 35 views
2

我正在設計一個協作系統,其中多個用戶可以編輯同一個文檔,就像googledocs一樣,我猜'搜索建議',但決不像先進。我多久可以有一個Ajax請求新數據?

我的問題是這樣的,我的設計工作?我知道足夠的php/ajax來設計這個,使用jQuery的ajax部分。但我從來沒有做過這樣的系統,因此設計可能有很大的缺陷。

網頁的可編輯的部分是一個表,其中的某些細胞可以被編輯(再次很像谷歌文檔的電子表格)。

理論上,這將工作,只要表格改變,這些改變都存儲在一個歷史,每1000毫秒(後過去後成功返回)我張貼的細胞變化到服務器

同時,另一個Ajax函數輪詢服務器(也是最後一次調用返回成功之後的每1000ms)並要求爲所有單元格完成的更改列表。

這是谷歌的是如何做的簡單的方法?

+0

可能相關:COMET:http://en.wikipedia.org/wiki/Comet_(programming) – 2010-08-27 11:44:18

+0

如果你反覆調查每1000毫秒(並且你不使用Comet),你可以使用這些請求發送和發送接收更改。將節省多達一半的請求。 – 2010-08-27 11:55:34

回答

1

這是一個值得商榷的主題和大多數解決方案取決於需求和使用情況,而不是什麼是「正確的」。一個更復雜的解決方案是使用旗語:

http://en.wikipedia.org/wiki/Semaphore_(programming)

鐵路信號燈標誌: http://en.wikipedia.org/wiki/Railway_semaphore_signal

這就是說,在你的情況,我懷疑「寫一個值」應該被使用。只需將每個編輯在服務器上排隊,然後應用到它的單元格。很明顯,會出現數據被不恰當地覆蓋的情況,但這是人類進入的地方。

你可以選擇當兩個用戶都集中並編輯同一細胞檢測 - 當這種情況發生時,將通知發送到每個使用他們的變化可能與其他用戶發生衝突。最不積極的用戶會退縮並去做別的事情。很明顯,還有更多的案例,如批量編輯,但這又取決於您的要求。

0

那麼你可以通過發佈更改的列表,並接受所有一重擊更改列表削減這兩個查詢之一。您只需檢查用戶實際使用該頁面的時間即可對其進行優化(例如,如果您在最近30秒內收到了鼠標懸停事件)。你可能會決定每秒鐘觸擊服務器是不必要的;大概10秒鐘就可以做到。畢竟,如果您的網絡速度很慢,完成一次呼叫可能需要1秒以上的時間。

之後,這是一個問題,你需要什麼樣的可擴展性,你的服務器,只有你可以回答。您投票得越多,您的Web服務器可以支持的用戶就越少。

谷歌文檔(我認爲)使用一個不斷打開的推送連接接收更新而不是輪詢,但這種架構是不應該輕易採取的。當然,他們有數千臺服務器。

相關問題