2013-09-28 43 views
1

我有一個需要Android客戶端和服務器之間進行通信的項目。Google Cloud Message或XMPP

通信流程爲:

  • 客戶端發送其位置到服務器定期(每10秒)
  • Server是一個桌面應用程序(C#或Java)。通常情況下,服務器做自己的工作,但有時它需要發送一個命令到一些特定的客戶端(實時需要

對於從客戶端到服務器的方向,是沒有問題的。但是從服務器到客戶端的方向相反,我遇到了一些問題。我正在使用Google雲消息傳遞,但我意識到有一些延遲或命令丟失。我也考慮過XMPP技術。如果我使用XMPP,則服務器和客戶端將成爲XMPP服務器的用戶(如聊天用戶)。除了失去互聯網連接的情況外,這是相當不錯的。

任何擁有XMPP服務器或/和GCM經驗的人都會給我一些建議。

回答

3

XMPP/Jabber用於實時通信。如果你想開發一個類似'whatsapp'的聊天應用程序,那麼你應該使用XMPP。

GCM是一種雲,即使您的應用程序未運行,也會在發送之前存儲您的消息。雲一旦設備連接到互聯網,就會保存您的消息併發送給他們。

您的需求是實時聊天,因此您必須使用XMPP。

+0

實際上,對於上游,我構建了一個Php Web服務器,以便Android客戶端可以將位置信息發佈到網頁,然後存儲在數據庫中。所以大部分問題都是從服務器向客戶端發送命令。無論如何,我也認爲你的建議是對的! –

+0

已更新的答案。 –

1

我同意Brontok,不同之處在於:

「 GCM是之前發送即使您的應用程序沒有運行雲可以節省您的郵件,一旦你運行你的應用程序向他們發送存儲郵件雲」

即使您的應用程序未運行,GCM也會將您的消息存儲在您的網絡連接(Android Play服務可到達)中發送您收到消息,並且如果通過通知,即使您的應用程序是「恢復」 「死」

+0

是的,我也同意你關於GCM的這一點。但是,你認爲我應該使用XMPP嗎? –

+0

是的!因爲建立了一個持久的TCP連接。 – 2013-10-01 15:27:37

1

我已經嘗試使用XMPP而不是GCM。 由於客戶往往移動速度非常快,所以他們使用3G或4G來保持互聯網連接。 我有以下情形測試:

  • 服務器從1數和發送該號碼到客戶端每30秒
  • 當客戶端收到的數量,它只是爲了服務器響應
  • 服務器接收響應和計算消息

我與3G和4G連接測試的「往返時間」,在每個測試中,服務器從1計數至600

這裏是結果:

3G:

  • 損失:六百分之十
  • 平均RTT:5.002秒

4G:

  • 損失:4/600
  • 平均RTT:1.112秒

其實,如果客戶端使用3G連接,延遲是不可接受的。你有什麼想法來解決這個問題嗎?