2012-09-20 58 views
1

我正在使用Channel API(GAE Java SDK + GWT),并且试图为有关重新创建通道的问题创建解决方法(到期日期之后并且在抛出错误之后)。我发现这个帖子可能的解决方案,但他们都没有工作:https://groups.google.com/forum/?fromgroups=#!searchin/google-appengine-java/channel/google-appengine-java/kD3H6BWNYuA/NivXiDrqW7QJ令牌到期后Google App Engine Channel API重新连接

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

此外,如果互联网连接关闭并重新打开,有时我会得到错误代码0或1.同样在这里:我不能重新创建并打开一个新的频道,因为我得到“onerror”和“onclose”。

任何人都可以帮助我解决更具体的细节?

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

回答

1

它接缝,不能重新使用gwt-gae-channel -... jar的GWT中的通道的原因是因为ChannelFacotry只会实例化一次Channel类型的对象,因此,当试图重新创建并打开另一个通道时,必须将初始对象设置为null。唯一的办法是创建另一个类,并复制/修改代码(我添加了一个简单的方法设置“通道”为空)

0

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

+0

我用d socket.close()来自gwt频道api库(这是javascript api的封装),但没有运气。如果我在第一个创建的令牌过期之前重新创建频道,则可以使用它。但它不会重置第一个计时器,因此最终我将无法调用创建和打开通道方法。 –

+0

您可以通过创建1分钟过期时间的频道来尝试此操作,然后使用计时器关闭套接字并每隔15秒重新创建一个频道。从第一个频道创建并打开1分钟后,您将收到代码401,并且将无法创建另一个频道。 –