2015-05-10 21 views
6

我正在爲Android製作一個聊天應用程序。爲此,我決定使用GCM(Google Cloud Messaging)。但已經研究了一下,我已經讀過它不應該用於聊天等。我應該使用GCM進行設備間的實時通信嗎?

我將實施上行消息(無需發送到同步,直接從設備發送數據到GCM)。以下是我的擔憂:

  • 郵件是否會立即傳輸? (足夠快以至於用戶可以看到「輸入」/看到)
  • 如果所有設備都在線,GCM到達客戶端的消息的保證是什麼。

我想用GCM的主要原因是

  1. GCM使用的電池壽命
  2. 這是一個Android的唯一的應用程序的最少。

如果GCM不是我應該使用的,應該使用什麼?

+0

哈維, 您是否可以完成與gcm或ejabberd的聊天?以及它在生產中遇到的任何問題? – Ramesh

+0

哈維我對此有疑問,並且有類似的要求..你能幫我決定是否應該使用GCM來保存我的目的嗎? @Ramesh你有什麼看法? – Newbiee

+0

嘿,新手,我已經更新了答案。你能指出哪些因素令你感到困惑! – Ramesh

回答

1

我正在研究一個類似的要求,並且根據我的知識,基於XMPP的解決方案,考慮能夠顯示反饋(如打字/ lastseen等)的要求是適當的。

您可以嘗試使用像ejabberd/mangooseim(開源)這樣的可用xmpp服務器,並將它安裝在您的服務器上,並使用asmack或任何其他客戶端Java庫與您的服務器通信。 (有很多可用的教程)。

有了這麼多的設置,你將能夠到達你能夠獲得狀態的階段,如「打字」,「走了」哪些whatsapp和一些聊天客戶端,如gtalk/pidgin顯示。

這將大致介紹現有聊天客戶端的工作原理。

Ejabberd完全是用erlang編寫的,如果你想擴展erlang的知識是必須的。 (它是專爲高併發容錯和不間斷系統而設計的,這在聊天應用中很有幫助。

GCM絕對能夠在99.99%有一個像正常的聊天應用烘烤狀態,你將不得不完全推倒重來

更新:。

這裏是考慮

從客戶端A客戶端BI要發送聊天消息與ro asters和不要求存儲消息在任何中央服務器,但只在客戶端 - XMPP(如whatsapp)

萬一你需要所有的通信存儲在服務器 - XMPP與SQL驅動程序或mongodb驅動程序/ gcm在你的時間和資源)

萬一你需要設備之間的通信不一定聊天,那麼gcm應該是足夠的。 我在我的應用程序當前使用這種方法,它是與測試版本一起玩在Playstore上,它在大多數情況下絕對正常工作。截至目前,我還沒有看到很多瓶頸。

+0

這是一個很好的主意。假設我可以以某種方式處理朋友(花名冊)的事情,GCM會不會更節省電池的效率?使用GCM還有更多的缺點嗎? –

+0

是gcm優化電池利用率。但我們無法真正比​​較xmpp和gcm,它們都是爲了不同的目的。 gcm用於調用android客戶端,說明需要從應用程序服務器同步的新數據。再次瞭解gcm如何知道新數據何時到達我們的服務器上是通過使用xmpp連接(請參閱此鏈接http://developer.android.com/google/gcm/ccs.html)。 – Ramesh

+0

來到Ejabberd,請檢查除xMpp通信(消息,iq和狀態)之外的節的概念,當用戶脫機時(通過他們的mnesia db)存儲和傳遞消息並確保消息中的非消息被遺漏。 pubsub(發佈訂閱)工作流程,就像典型的羣組聊天一樣,通過使用ejabberd服務器,您可以免費實現聊天應用程序的更多功能。 – Ramesh

相關問題