2012-08-12 47 views
0

我正在使用Google App Engine和Channel API創建Web應用程序。這是我第一次嘗試做類似Ajax的事情,我懷疑有一種解決我的問題的標準技術,但我一直無法找到它。通過GAE通道API優雅地處理封閉通道

我的客戶端程序會將消息發佈到服務器。如果消息無法發送,例如,如果通道關閉,消息會發生什麼情況?如果客戶端在平板電腦上並且用戶走出無線網絡的範圍會怎麼樣?對於我的應用程序來說,重要的是消息會被憎恨,但我不知道如何去做。

當通道關閉時,我知道我應該從服務器請求一個新的令牌,但我不知道我的客戶端如何獲得該令牌並在不重新加載頁面的情況下打開連接(並因此丟失數據) 。在給出的演示here中,客戶端需要知道該令牌。

var channel = new goog.appengine.Channel({{token}}); 

但我已經在其他地方看到客戶端不需要知道該令牌。 - 這將如何工作?

另外,onerror和onclose回調函數似乎沒有給我失敗的消息,所以我怎麼知道需要重新發送什麼?

如果有人能把我推向正確的方向,我將非常感激。

回答

0

如果「關鍵是消息被重新發送」,那麼你應該考慮本地客戶端而不是瀏覽器。如果用戶超出範圍並關閉或重新加載瀏覽器窗口,那麼數據肯定會丟失。

  1. 「我不知道我的客戶端如何獲得該令牌並在不重新加載頁面的情況下打開連接」。使用AJAX to make a call to server - 這不會重新加載頁面。

  2. 客戶端需要令牌來打開一個通道。沒有辦法繞過它。

  3. onclose套接字關閉時應該調用。如果客戶端失去連接,則在套接字超時和onclose被調用之前可能需要一些時間。