2011-09-29 67 views
2

我需要爲學校製作在Android上運行的應用。其實有兩個應用程序,一個客戶端和一個服務器。 Ther服務器運行在PC上,而客戶端運行在Android設備上。我想知道什麼是最好的技術。我知道RMI和WebServices沒有在Android中實現,因此有什麼選擇(除了以傳統方式實際與套接字進行通信之外)。我沒有考慮的一個替代方案是REST,但是我需要能夠在其他客戶做出某些事情時通知客戶,類似於玩家A通知玩家B他做出了行動的基本遊戲。如我所說,套接字可以做到這一點,但與RMI和Web服務相比,它們只是低級別的,並且只是希望將它們作爲最後的手段。適用於客戶端 - 服務器Android應用的最佳技術

回答

2

保持簡單。使用REST並讓客戶端輪詢更新。

另外,如果你到一個點下來,你需要擴展的道路,這種解決方案實際上是相當容易的擴展,因爲你的服務器並不需要保持連接。因爲有一個特定的服務器和客戶端之間沒有共享的狀態(有共享應用和客戶端之間的服務器),你可以很容易地添加更多的服務器來處理查詢,並把它們背後負載平衡器。

您還可以添加緩存,以便在投票只是獲取而不引起響應的重新計算完全相同的響應。遊戲狀態發生變化時,您可以讓後端遊戲狀態服務器更新緩存。這會讓你更頻繁地進行調查,並且仍然具有非常靈活的可擴展架構。

+0

使用其餘的我將在「檢查,如果其他玩家取得了他的行動」的無限循環一個用戶。這是相當CPU密集型的,也會在服務器上做更多的請求。另一個問題是,一旦建立了「遊戲室」,我可能需要兩個用戶通過peer2peer進行通信。 –

+0

很好的解釋哥們。可以分享一些鏈接來知道這件事嗎? – Dharmendra

+0

@Pazvanti - 設置任何輪詢時,您總是需要在輪詢之間有某種間隔。你不能在沒有某種等待的情況下把它扔進一個循環。客戶端到客戶端的通信也可以通過服務器基礎設施完成。根據您希望事情的響應程度,您可以適當調整輪詢時間。 – cdeszaq

2

對於傳統上用於即時通信的回合制遊戲,你可以看看XMPP(例如Smack)。使用C2DM創建用於推送通知的遊戲也很有趣。

您也可以看看這實質上是在球員動作被送入一個永無止境的HTTP響應HTTP流。

或者,您可以查看更適合實時遊戲但仍適用的二進制消息傳遞系統,如RabbitMQ(平穩回合制遊戲出了什麼問題?)。

+0

HTTP流式傳輸的問題,特別是在基於回合的遊戲場景中,服務器必須保持連接狀態,在這種情況下,每場遊戲需要2個連接。對於大多數Web服務器(不是全部),打開的連接內存密集,這意味着這種方法不能很好地擴展,因爲大部分時間都花在等待用戶和浪費資源。 – cdeszaq

+0

你說得對 - HTTP流看起來不可擴展。儘管如此,使用C2DM將是一個非常好的解決方案。 –

+0

我將不得不考慮Smack,看看我能用它做什麼。如果它主要用於即時消息傳遞,那麼它可能不是最好的解決方案......但它可能比這更強大。感謝您的建議。 –

相關問題