2011-05-16 35 views
1

我正在爲android應用程序編寫應用程序,其中兩個設備應該通過互聯網相互通信。除此任務外,他們還通過REST與EJB3服務器進行通信。所以我決定一舉兩得,並使用REST + EJB3在兩個配對的Android設備之間傳輸數據。 所以我實現的情景是這樣的:通過http REST和EJB3連接兩個android應用程序

  • 這兩個設備連接到服務器並獲取會話ID。
  • 第一設備將數據發送到第二設備
  • 服務器獲取數據,但並沒有結束HTTP請求,而是付諸等待池
  • 第二設備要求數據
  • Server中的數據傳輸到第二個設備並釋放第一個設備的等待連接(和線程)。
  • 如果沒有第一個或第二個設備請求,則對方等待服務器端的超時,然後再次發送請求。我們需要等待服務器端的數據在數據到達後立即停止響應。

因此,在這種模式中我看到兩個缺點: - 在服務器端等待線程 - 他們消耗服務器資源,並作爲結果限制服務器的吞吐量 - 如果服務器線程將不會等待一個答案有超時,那麼客戶應該重複請求並花費大量流量。

這種問題的最佳實踐解決方案是什麼?

P.S:忘了提及兩臺設備應該儘可能平滑和快速地交換數據。

回答

2

您將需要使用C2DM http://android-developers.blogspot.com/2010/05/android-cloud-to-device-messaging.html

當需要從A發送到B的消息 - 一個應該連接到服務器,並根據數據類型/量 - 服務器要麼通過C2DM推送數據或只是告訴設備B返回並獲取數據。

無論如何,我會將數據存儲在服務器上。如果推送失敗 - 您可以重試。無需重新發明輪子。 C2DM中已解決的大多數問題/問題

+0

感謝您的鏈接,但是如果我需要從版本1.6開始在Android上運行我的應用程序,該怎麼辦。據我瞭解C2DM支持僅在2.2版本中添加... – 2011-05-16 18:08:29

+0

沒有推 - 你不能達到「順利和快速」的要求。您可以使用設備A將數據寫入服務器,但設備B必須定期進行更新。這樣做往往會導致電池無法使用。從我所知道的你不能依賴設備和服務器之間的連接。 IP可能會改變,無線開關等。 – katit 2011-05-16 18:23:36

+0

Yeap,我也知道這一點,這就是爲什麼我問這個問題。但我真的需要從1.6開始的所有版本的解決方案。任何其他想法? – 2011-05-16 18:53:57

相關問題