2012-09-20 56 views
1

我正在使用Channel API(GAE Java SDK + GWT),並且試圖爲有關重新創建通道的問題創建解決方法(到期日期之後並且在拋出錯誤之後)。我發現這個帖子可能的解決方案,但他們都沒有工作:https://groups.google.com/forum/?fromgroups=#!searchin/google-appengine-java/channel/google-appengine-java/kD3H6BWNYuA/NivXiDrqW7QJ令牌到期後Google App Engine Channel API重新連接

我試圖刪除通道API iframe並在到期時間之前重新創建通道。它接縫工作,但如果我重新創建一個頻道定時器不重置,所以如果我嘗試創建一個新的頻道,並在過期後已打開它,我得到「onerror」和「onclose」(即使我關閉了插座)。如果我刷新頁面,它的工作原理,但這不是一個好的選擇

此外,如果互聯網連接關閉並重新打開,有時我會得到錯誤代碼0或1.同樣在這裏:我不能重新創建並打開一個新的頻道,因爲我得到「onerror」和「onclose」。

任何人都可以幫助我解決更具體的細節?

更新: 我使用了一個定時器,在onclose/onerror被調用後重新創建通道(5秒),並且它現在可以工作。但在第一個令牌到期後,重新創建通道將不再起作用:(

回答

1

它接縫,不能重新使用gwt-gae-channel -... jar的GWT中的通道的原因是因爲ChannelFacotry只會實例化一次Channel類型的對象,因此,當試圖重新創建並打開另一個通道時,必須將初始對象設置爲null。唯一的辦法是創建另一個類,並複製/修改代碼(我添加了一個簡單的方法設置「通道」爲空)

0

如果您使用JavaScript API,則必須在嘗試創建新套接字之前調用socket.close()。socket.close()將刪除iframe等

+0

我用d socket.close()來自gwt頻道api庫(這是javascript api的封裝),但沒有運氣。如果我在第一個創建的令牌過期之前重新創建頻道,則可以使用它。但它不會重置第一個計時器,因此最終我將無法調用創建和打開通道方法。 –

+0

您可以通過創建1分鐘過期時間的頻道來嘗試此操作,然後使用計時器關閉套接字並每隔15秒重新創建一個頻道。從第一個頻道創建並打開1分鐘後,您將收到代碼401,並且將無法創建另一個頻道。 –