2012-03-07 38 views
0

我正試圖設計一個擁有持久虛擬世界的多人Android遊戲。我有一個帶有數據庫的服務器,代表當前的世界狀態以及一些公開的Web服務。我有一個android應用程序,可以繪製特定玩家對世界的看法,還可以通過http調用服務器來獲取玩家的當前狀態(並相應地更新android的視圖)。Android設備調用REST Web服務的速度有多快?

到目前爲止,我的計劃是讓應用程序在應用程序處於活動狀態時持續輪詢服務器(不需要在用戶未播放時進行輪詢)。我想知道應該多快能輪詢我的Web服務並更新手機。我希望遊戲能夠響應並且與虛擬世界中的其他玩家稍微同步。另外,關於服務器必須處理的負載的任何想法?那會是瓶頸嗎?

感謝您的幫助!讓我知道我是否可以澄清任何事情。

+0

取決於...很多東西。 – 2012-03-07 16:34:15

回答

3

圍繞速度有很多因素,如連接性(wifi/3G/4G/HSDPA)或服務器響應時間。或者如果用戶是偏執狂,並構建法拉第籠。這些只是一些可能性。你只需要通過性能增強和錯誤處理(儘管我會盡力避免早期的優化問題)做到最好。

你可以看看簡單的東西,比如使用JSON over XML,因爲它具有更小的尺寸,甚至使用壓縮。

我會爭論,雖然我從來沒有這樣做過,但可以使用UDP,但這取決於您是否需要100%的數據包到達。據我所知,TCP試圖確保數據包傳輸,但是因爲這個速度較慢。例如,如果這是某種FPS,我會使用UDP,但如果它是基於回合的,那麼TCP就沒問題。

的UDP的實例教程可以在這裏找到:http://www.helloandroid.com/tutorials/simple-udp-communication-example

如果你想查詢請務必使異步因爲你不希望這在主線程中發生的事情。你可能使用AlarmManager,因爲沒有需要的服務,雖然如你所說的「不需要輪詢當用戶不玩」你可以實現自己的設置

爲了幫助這裏有鏈接到一些警報和的AsyncTask教程:

+0

感謝您的詳細回覆。我還沒有研究過UDP--儘管我認爲我的遊戲設計只能用TCP(儘管遊戲不是真正的基於回合的)。 此外,我已經實施了一些您的建議。 UI,物理('實時'線程)和我的Web服務工作都是在單獨的線程上完成的,以提高性能。此外,我已經在我的機器人2(50-60 fps)上獲得了很好的fps。遊戲應該是相當輕量級的,並且我傳輸的數據非常小。 – techshaman 2012-03-07 16:51:22

+0

對不起FPS我的意思是第一人稱射擊只是一個例子。但像射手那樣快速運行的遊戲需要快速的網絡連接。沒有什麼比由於「滯後」而被頭部擊中時更糟糕, – 2012-03-07 16:55:28