我在手机上使用我的GAE应用程序。即使我通过socket.close()函数手动关闭套接字,我也遇到了在通道api中获取/ _ah / channel / disconnected断开连接通知的问题。这篇文章是在延迟一分钟之后发生的。有谁知道加快速度的方法?在我的情况下,socket.close()不会产生频道断开通知(仅在手机中,但它可以从笔记本电脑中完美运行)!
答案 0 :(得分:4)
Channel API前端服务器“实现”通道断开所花费的时间取决于浏览器的实现。
在性能良好的浏览器上,我们捕获了beforeunload事件并向我们的前端发送了一条消息,说“这个客户端正在消失”。在其他浏览器上,我们可能无法获取事件(或者由于各种实现原因我们可能无法收听它,例如浏览器经常发送它(FFFUUUU IE))或者一旦我们收到事件,我们发送的XHR可能会得到吞噬。在这些情况下,前端服务器意识到客户端已经消失,因为它无法接收心跳 - 这就是手机上发生的情况。 (出于好奇,什么电话?)
你的案子很有意思,因为你明确地调用onclose。这样做的唯一办法是配置具有Channel FE代码的iframe - 换句话说,onclose就像整个浏览器窗口关闭一样;它没有利用浏览器仍然处于良好状态的事实,可以等到关闭,直到发送消息。
所以我建议两件事:为你的代码添加一个自定义处理程序(与你的/ _ah / disconnect处理程序做同样的事情),这样你就可以在知道手动关闭频道时制作一个XHR。这是kludgy但功能。关于这一点,你需要在你的javascript代码中明确地知道你的客户端ID。
其次,向我们的问题跟踪器(http://code.google.com/p/googleappengine/issues/list)添加一个问题,以便在明确调用onclose时请求更好的断开连接通知。
希望有所帮助;对不起,现在还不是一个简单的答案。