我正在編寫一個功能之間有一個聊天模塊的Android應用程序。我選擇使用長輪詢來實現聊天。使用長輪詢實現Android聊天模塊
因爲我試圖避免吃掉用戶手機電池,我想添加到實施GCM消息平臺來通知設備有關新消息。
這個想法是當用戶在他的屏幕上打開應用程序時使用長輪詢,因此參與實時聊天會很快,並且不會發送很多GCM消息,而在閒置時服務器會知道用戶目前不在輪詢,並且會在新消息到達時向設備發送GCM消息以將其喚醒。
我有幾個問題,實施這個方法掙扎:
什麼是知道用戶的狀態的最好方法 - 是HES投票現在或等待推送消息將其喚醒。我是否應該設置應用程序以在服務器進入睡眠狀態時通知服務器,或者服務器應該自行檢測它?
如果我設置它,以便應用程序將通知服務器何時切換模式,如何在此通知未通過的情況下恢復。 (當客戶端正在等待gcm並且服務器認爲它正在輪詢並且不會發送一個..)
我遇到了一些情況,即客戶端正在輪詢並且服務器即使收到新消息也沒有響應。也許某種服務器上的客戶端不知道的超時...如果這是一個錯誤,我會修復它,但是當客戶端認爲它正在輪詢而服務器不知道它時,我該怎麼辦?請求的超時時間太長,無法等待下一次輪詢)。
我的客戶端是原生Android,Web服務是WCF(C#)。
任何想法都會有幫助。
你的問題編寫得很好,但有一些問題可能使得很難在SO上得到答案。你在一個問中提出三個不同的問題。此外,它是非常開放的,而不是更實際的「可回答」問題,通常是首選的(問「我應該......」不是很負責任,所有答案都必須以「依賴」開始)。這也使你的問題相當「本地化」(即非常特定於你的情況)。 – Jeroen
也許你可以將它分爲三個問題,並且儘可能使它們不那麼開放式,可回答並且儘可能沒有本地化。 – Jeroen
想到將它分成多於1個問題,但所有部分都提到了同樣的問題 - 移動應用的即時消息協議實現。因爲每個問題都取決於所有其他答案,所以我選擇把它全部寫成一個大問題。 – Idan