2012-08-12 48 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被调用之前可能需要一些时间。