2016-01-15 39 views
0

我已經通過了關於這個話題的不同的問題,但是,他們都沒有清除我通過客戶端通知服務器 - 客戶端IM應用程序的最佳方法的懷疑。如何通知客戶端即時消息(IM)應用程序的更新?

問題: 整個問題是如何通知客戶端應用程序的更新。我alread看到以下方法:

  1. 客戶不斷檢查更新:不時,客戶端應用程序執行的服務器進行檢查,看是否有針對特定用戶的更新; 問題:它根本不是performatic。假設你有一百萬用戶,他們每個人都會每秒檢查一次新的更新。即將發佈的服務將不得不每秒處理100萬個請求。不會工作。

  2. 客戶端應用程序打開一個套接字:客戶端應用程序打開一個套接字,併發送其地址的服務器。服務器依次持有此信息,並在需要向客戶端通知某些更新時連接到套接字。 問題:通常客戶端將連接到NAT,因此,它有權訪問的IP位於不可見範圍內。爲了向這個客戶端發送消息,NAT中的端口轉發必須被配置,這是不能完成的。

儘管該技術,我認爲這種做法將一直使用,但是,我不知道如何上述問題可以得到解決。

  • 谷歌雲消息(GCM):使用GCM服務通知任何更新的客戶端。 問題:使用第三臺服務器來處理即時消息似乎並不正確,並且引發了對系統可擴展性的擔憂。當消息和用戶數量呈指數增長時,服務似乎會下降。儘管如此,在交付目標之前將兩臺服務器的信息傳遞給目標只是增加了這一過程的瓶頸。

  • 2和3的組合:當最後一個持久地址不再可用時,使用GCM到達客戶端。 問題:同在2

  • XMPP描述:我見過很多答案指示IM應用中使用XMPP,但是,XMPP是一個協議 - 按照什麼我在網上foun。我不明白它是如何解決2中描述的問題的。

  • 鑑於上述選項,有人可以指示我應該嘗試去哪條線嗎?哪一種方法有最好的成功機會?

    謝謝你們在先進。

    +1

    GCM存在做你的要求;它是由Google設計,支持和運行的 - 他們非常擅長他們的工作。 –

    +0

    嗨,亞歷克斯,即使在數百萬用戶的情況下 - 以及潛在的數十億條消息 - 然而,GCM將是一個不錯的選擇? –

    回答

    1

    使用Google雲消息傳遞。反對你聲稱這項服務是爲了擴展到數十億用戶而建立的,它通常不會引入性能瓶頸。

    你基本上想要做的就是使用消息傳遞服務來喚醒設備。如果你堅持,你仍然可以使用你的客戶端服務器方法,因此你自己的協議讓客戶端從後端查找新的消息。

    +0

    我成功使用GCM來達到我的目的。謝謝 :) –

    相關問題