我希望能夠在我的應用程序和服務器之間交換數據,每個服務器端都必須能夠發起數據發送。我希望它發生得很快,從客戶端對新消息進行輪詢對我來說不夠快。推送技術如何工作?實現類推技術
我想保持從設備到服務器的打開的套接字連接,並以某種自定義格式發送接收原始字節。 這是一個好方法,我會遇到什麼問題?你會建議作爲替代方案嗎?
我希望能夠在我的應用程序和服務器之間交換數據,每個服務器端都必須能夠發起數據發送。我希望它發生得很快,從客戶端對新消息進行輪詢對我來說不夠快。推送技術如何工作?實現類推技術
我想保持從設備到服務器的打開的套接字連接,並以某種自定義格式發送接收原始字節。 這是一個好方法,我會遇到什麼問題?你會建議作爲替代方案嗎?
當談到消息傳遞時,初始化服務器和客戶端之間的新連接所需的時間通常超過發送數據本身所需的時間 - 至少對於簡單的狀態消息。這大大增加了通信延遲,這似乎是您的主要擔憂。
主要有兩種方法來解決這個問題:
保持連接在兩者之間開口端在任何時候都:這是處理這個問題的標準方法 - 它的優點編程簡單,但您可能需要定期使用保持活動數據包以保持連接處於打開狀態。這可能會縮短移動設備的電池壽命並略微增加網絡成本。它也可能與移動設備的電源管理功能產生不利的相互作用。
另外,不管你做什麼,你不能完全消除的一個新的連接需要在不方便的時候要建立的可能性 - 這是大多閒置在今天的網絡基礎設施不票價很好的連接,我只怕......
使用無連接的協議,如UDP:該解決方案,以儘量減少它要求你的服務器和客戶端的目的是把通信和電力成本,但潛力處理這些協議固有的不可靠性。
這就是說,我不會考慮數據的實際格式是一個主要關注的問題,直到某些分析表明自定義格式確實會節省大量成本。我會考慮在開發階段使用現成的網絡監控和分析軟件的能力更加重要...
推技術被鬆散地稱爲彗星。基本邏輯是打開與服務器的持久HTTP連接(通常稱爲HTTP Streaming)。由於此連接不會永遠持續(由於默認情況下服務器的限制),您應該可以重新打開連接。我不知道如何在android中做到這一點,但這應該是可能的。
這背後的基本概念是在這個blogpost
解釋由於這是一個概念,它可以在你選擇的任何服務器端編程語言實現。這個tutorial給出了一個關於如何在php中實現COMET的公平介紹。如果你對JavaScript感到滿意,socket.io是另一個這樣的庫。這SOF thread提供了一些有用的鏈接。
來到優點和缺點,
你有沒有試過xmpp,你有什麼類型的服務器端腳本? –
不,我沒有。它可以在Android上使用,或者我必須移植一些庫嗎?我有服務器端的PHP腳本。 –
好的。我會發布你的答案 –