Appengine Java & GWT - 无法重新创建和打开通道

Posted

技术标签:

【中文标题】Appengine Java & GWT - 无法重新创建和打开通道【英文标题】:Appengine Java & GWT - Cannot recreate and open a channel 【发布时间】:2012-03-06 10:54:43 【问题描述】:

我在 GWT 中使用带有 gwt-gae-channel 库 (v. 0.4) 的 App 引擎 Channel API,并且我正在尝试在过期后测试通道的重新创建(即使用代码 401 调用 onError)。 测试是: - 使用 GWT RPC 方法创建通道(clientID= 和 expire = 1 分钟)并获取所需的令牌:createTestChannel(useremail)。 - 调用 ChannelFactory.createChannel(token, new ChannelCreatedCallback() ... ) 和 channel.open(new MySocketListener()...) - 当 onError(...) 被调用(通道过期)时,我尝试再次调用 createTestChannel(useremail) (为相同的 clientID 获取新令牌)并打开一个通道,但我总是得到 onError() 和 onClose()称为。 如果我刷新页面或使用相同的代码打开一个新选项卡,第一个频道创建工作正常,但在每个频道到期后,我无法重新创建它们。我也尝试了另一个 clientID,但它不起作用。

【问题讨论】:

【参考方案1】:

这是一个已知问题:

https://groups.google.com/forum/?fromgroups#!searchin/google-appengine-java/channel/google-appengine-java/kD3H6BWNYuA/NivXiDrqW7QJ

【讨论】:

我只测试了这个本地主机,也许我也应该尝试在生产服务器上测试这个......【参考方案2】:

您必须在服务器上创建一个新频道并获取新令牌。来自文档:

令牌将在两小时后过期。如果客户端与通道保持连接超过两个小时,则会调用套接字的 onerror() 和 onclose() 回调。此时,客户端可以向应用程序发出 XHR 请求以请求新令牌。

http://code.google.com/appengine/docs/java/channel/overview.html#Tokens_and_Security

【讨论】:

当通道关闭时,我调用相同的 rpc 方法 createTestChannel(username),witch 创建一个通道并返回一个令牌。但是在我收到新令牌后,当我尝试打开通道时会调用 onError() 和 onClose() (并且在服务器端没有抛出异常)。 很奇怪。我必须休息一下。 我也有同样的问题。还有 gwt-gae-channel 库。我重新创建令牌并获得 onError() 和 onClose() 回调。

以上是关于Appengine Java & GWT - 无法重新创建和打开通道的主要内容,如果未能解决你的问题,请参考以下文章

在 AppEngine 上保护 GWT 应用程序

GWT/AppEngine:设计 RequestFactory 工作流以更好地处理异常

如何在 GWT 中为 AppEngine SystemProperty 继承模块

Android 在没有 AppEngine 的情况下重用 GWT RPC 后端

为 Web 和 Android 服务的 AppEngine GWT-RPC 服务

SerializationException while desalinization com.google.appengine.api.datastore.Key GWT