2009-12-22 149 views
3

我們正在開發基於瀏覽器的社交遊戲,並且它是一款MMORPG遊戲。我們使用html/javascript/css作爲前端技術(與閃存相比)。當用戶第一次加載我們的遊戲時,會下載一堆文件(外部js/css),並會請求幾個ajax調用。除非用戶手動刷新頁面,否則整個頁面將不會再次加載。我們創建一個js對象來存儲用戶特定的數據,如現金,水平等。它在用戶即將到來的操作過程中可能會發生變化。所以我們需要同步來自後端的數據。一個特殊的問題是用戶的數據也可以被動地更新(由其他用戶),這可能發生在其他用戶的戰鬥中。所以我的問題是如何以及何時同步?直到現在我們經歷了兩個階段,1)每當用戶點擊標籤(在html中顯示/隱藏div)或可能的操作(如打架/買東西),然後我們調用ajax請求獲取新數據從數據庫每次。 2)與1)類似,但我們只是添加一個代理來指示用戶的數據是否更改,以減少無用的數據庫查詢。 ajax調用將首先進入代理。在前端和後端之間同步數據

1)我們可能有70%+無用的Ajax調用和的數據庫查詢

2)我們可能有70%+無用AJAX調用

現在我們用2)的方法。但我不認爲這是最好的解決方案,因爲我們仍然有70%+無用的ajax調用。所以有沒有比這個用例更好的解決方案?


解釋

無用AJAX調用:自2個AJAX調用之間的間隔中,用戶數據可以不改變的。

回答

2

好問題,我認爲最好的解決方案是實施服務器推送。這個想法很簡單,因爲你有客戶端和服務器之間的連接,服務器知道數據何時被修改,因此他可以通知客戶端(在你的情況下html/javascript/css)有關任何改變。這應該消除無用的輪詢(你的ajax調用)。現在

,你可能要檢查了這一點,或者只是谷歌搜索等阿賈克斯推解決方案: http://www.icefaces.org/main/ajax-java/ajaxpush.iface

這也將取決於您使用的應用程序服務器的技術,在最壞的情況下,你將不得不實現你自己的Ajax Push。

0

我同意Kel在這裏Ajax-Push AKA Comet是最好的解決方案。
我已經從經驗中知道Persevere是一個很好的解決方案,它與Dojo toolkit效果最好。
如果性能至關重要,我還可以建議您嘗試Wt,因爲它允許使用C++編寫網站。 他們兩人都是您的需求的絕佳選擇。