使用GAE通道api优雅地处理封闭通道

时间:2012-08-12 12:47:20

标签: ajax google-app-engine client-server channel-api

我正在使用带有Channel API的Google App Engine创建一个Web应用程序。这是我第一次做类似Ajax的尝试,我怀疑有一种标准技术可以解决我的问题,但我一直无法找到它。

我的客户端程序会将消息发布到服务器。如果无法发送消息,例如,如果频道已关闭,该消息会发生什么?如果客户端在平板电脑上并且用户走出无线网络范围怎么办?对于我的应用程序,重新发送消息至关重要,但我不知道如何执行此操作。

当频道关闭时,我知道我应该从服务器请求一个新令牌,但我不知道我的客户端如何获得该令牌并打开连接而不重新加载页面(因此丢失数据)。在给出here的演示中,客户端需要知道令牌。

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

但我在别处读过客户端不需要知道令牌。 - 那会怎么样?

此外,onerror和onclose回调函数似乎没有给我失败的消息,所以我怎么知道需要重新发送什么?

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

1 个答案:

答案 0 :(得分:0)

如果它重要的是消息重新发送"那么你应该考虑本机客户端而不是浏览器。如果用户超出范围并关闭或重新加载浏览器窗口,那么数据肯定会丢失。

  1. "我不知道我的客户如何获得该令牌并打开连接而无需重新加载页面"。使用AJAX to make a call to server - 这不会重新加载页面。

  2. 客户需要令牌才能打开频道。没办法。

  3. 套接字关闭时应调用
  4. onclose。如果客户端失去连接,那么在套接字超时和调用onclose之前可能需要一些时间。