【问题标题】:Google App Engine Channel API reconnect after token expiration令牌过期后 Google App Engine Channel API 重新连接
【发布时间】:2012-09-20 13:32:39
【问题描述】:

我正在使用 Channel API (GAE Java SDK + GWT),并且我正在尝试为有关重新创建通道的问题创建一个解决方法(在到期日期之后以及在引发错误之后)。我发现这篇文章提供了可能的解决方案,但没有一个有效:https://groups.google.com/forum/?fromgroups=#!searchin/google-appengine-java/channel/google-appengine-java/kD3H6BWNYuA/NivXiDrqW7QJ

我尝试在过期时间之前删除 Channel API iframe 并重新创建通道。它可以工作,但如果我重新创建一个频道,计时器不会重置,所以如果我尝试创建一个新频道并在过期期限过后打开它,我会得到“onerror”和“onclose”(即使我关闭了插座)。如果我刷新页面,它可以工作,但这不是一个好的选择

此外,如果互联网连接关闭并重新打开,有时我会收到错误代码 0 或 1。这里也是如此:我无法重新创建和打开新频道,因为我收到“onerror”和“onclose”。

谁能帮我提供更具体的解决方案细节?

更新: 在调用 onclose/onerror 后,我使用计时器重新创建通道(5 秒),并且它现在可以工作了。但是在第一个令牌过期后,重新创建频道将不再起作用:(

【问题讨论】:

    标签: java google-app-engine gwt channel-api


    【解决方案1】:

    似乎无法使用 gwt-gae-channel-...jar 在 GWT 中重新创建通道的原因是因为 ChannelFacotry 只会实例化一次 Channel 类型的对象,因此,当尝试重新-创建并打开另一个通道,例如,您必须将初始对象设置为空。我能做到这一点的唯一方法是创建另一个类,然后复制/修改代码(我添加了一个简单的方法来将“通道”设置为 null)。

    【讨论】:

      【解决方案2】:

      如果您使用 javascript API,则必须在尝试创建新套接字之前调用 socket.close()。 socket.close() 将删除 iframe 等。

      【讨论】:

      • 我从 gwt 通道 api 库(它是 javascript api 的包装器)中使用了 socket.close() 但没有运气。如果我在第一个创建的令牌过期之前重新创建一个频道,那么它就可以工作。但它不会重置第一个计时器,所以最终我将无法调用创建和打开通道方法。
      • 您可以尝试通过创建一个过期时间为 1 分钟的通道,然后使用计时器关闭套接字并每 15 秒重新创建另一个通道。从创建并打开第一个频道开始 1 分钟后,您将收到代码 401,并且无法创建另一个频道。
      猜你喜欢
      • 2012-01-07
      • 1970-01-01
      • 2011-06-03
      • 1970-01-01
      • 1970-01-01
      • 2014-02-01
      • 1970-01-01
      • 2018-04-28
      • 2014-07-19
      相关资源
      最近更新 更多