通道API通道在没有onclose或onerror调用的情况下断开连接.JavaScript控制台包含对talkgadget.google.com的HTTP调用失败的日志

Kum*_*mar 9 google-app-engine channel-api

我已在我的应用程序中实现了Google App Engine的Channel API功能.一切顺利.我为每个用户每隔一小时创建一个新频道.我设法在每个会话中维护一个通道(浏览器中不同选项卡的通道相同).我已经实现了onerror和onclose方法,每次调用它们时,都会向服务器发出一个请求有效令牌的调用.

有时,在频道活了一段时间后,它会断开连接.我可以在JavaScript控制台上看到对talkgadget.google.com的HTTP调用失败.URL是这样的:

https://129.talkgadget.google.com/talkgadget/dch/bind?VER=8&clid= .....

这些调用具有诸如"401(令牌超时)"或"401(令牌无效)"之类的响应.确实如此,客户端使用的令牌无效.它应该使用新令牌进行更新,但不会调用onerror或onclose方法.我怎么知道这会发生什么时候或如何处理呢?除了onerror或onclose方法之外,没有真正的方法可以说明客户端是否断开连接.如果我刷新页面,则会解决此问题(每次用户刷新时,我都会从数据库中获取有效令牌).

我检查了套接字对象的"readyState"属性,它的值为1.有许多人面临这个问题,截至目前,GAE的人们似乎没有提供有效的解决方案.

编辑:我是高级帐户持有人,此问题阻碍了我们的部署.

编辑2:每个标签有一个频道可以减少发生这种情况的频率.但它并没有完全解决问题.

Kum*_*mar 3

自我发布问题以来已经六天了,AppEngine 团队或任何其他用户还没有做出任何回应。

我应用的解决方法是在网站上有一个按钮,可以从数据库中获取(有效)令牌,关闭通道,然后使用收到的令牌再次打开它。有时它是一个之前应该收到的新令牌,有时它是一直有效的相同令牌。

我同意这个问题不能经常被复制,但当它发生时,它会造成很大的损害。我希望我能尽快找到解决方案。

编辑:每个选项卡一个通道可以减少发生这种情况的频率。但这并不能完全解决问题。