2016-02-27 48 views
0

我上的應用,在那裏這種情況下會發生如何使用Parse Server正確設計可靠的確認機制?

  1. 解析服務器工作發送一個無聲推送通知,告訴應用程序醒來,拉開新的數據
  2. 應用程序向服務器發送一個請求,以獲得新數據和服務器響應
  3. Server不知道如果數據是由應用程序收到.....

如何解決這最後一步?如何確保應用程序有機會確認收到數據?

謝謝

回答

0

我會做這樣:

  1. 當應用程序向服務器發送新的數據的請求,發送ID碼也
  2. Server存儲這個ID
  3. 當應用程序結束數據接收,向服務器發送帶有ID的接收確認消息。
  4. 當服務器收到來自應用程序的「receive ok」消息時,從其列表中刪除該應用程序的id。

通過這種方式,服務器知道有多少應用程序要求數據傳輸多少應用程序成功接收數據。

數據傳輸的應用程序ID可以在任何傳輸會話之間更改。

+0

這會錯過一些情況;該應用程序將收到數據,但無法向服務器報告「收到確認」。儘管如此,這可能會很好。 – Jonah

+0

還有什麼其他方法可以解決這個問題?網絡套接字?其他協議? –

+0

我認爲web套接字是一個很好的解決方案。 Http請求可以是另一種解決方案... –

0

試圖解決的Two Generals Problem不太可能是富有成效的。而應考慮如何設計一個可以容忍失敗的系統。

您的推送通知可能永遠不會發送。當您的應用程序被帶到前臺時,您的應用程序是否可以檢查新數據或以其他方式進行備份,以便它仍然有用?

收到推送通知後,您的應用可能無法發送加載此數據的請求。你可以依靠下一個通知或將其視爲缺少通知,並仍然允許你的應用程序有用嗎?

請求數據後,您的應用程序可能永遠不會收到響應。再次如何確保應用程序對用戶有用?如果及時交付這些數據並不嚴格,那麼您可以依靠重試機制。如果它很危急,也許你需要某種方式來警告用戶,看起來是過時的。

什麼解決方案對您有意義取決於您的應用在做什麼以及爲什麼需要這些數據。

+0

如果應用程序在服務器發送通知後沒有提取數據,服務器將在預定義時間後再次嘗試。這並不是說我不是在設計一個不容忍失敗的系統,我只是想確保我設計一個確認機制,以便我可以檢測數據是否未發送並採取進一步的行動。 –

+0

服務器可以檢測數據是否被請求,但不能可靠地確定是否收到數據。客戶端可以檢測是否收到數據,但不知道是否從未收到過有新數據可用的通知。 – Jonah

+0

如果我告訴你時間交付有點重要,你會如何解決這個問題,你可以將這個應用程序視爲一個聊天應用程序,所以幾秒鐘的延遲可能不成問題。 –