间歇性错误代码400,在连接到通道的客户端上的描述“”

时间:2012-12-19 23:06:04

标签: google-app-engine channel-api

我的Google App Engine应用程序使用Channel API在某些时候运行良好。但是,间歇性地,连接到通道的js代码会产生错误。在socket.onError中,错误代码设置为400,描述设置为空字符串。我已经检查过用于连接的令牌是否有效。我也尝试在socket.onError中重新创建通道,首先调用socket.close(),但这似乎不起作用。通常在成功之前会出现一系列失败。客户端js正在iOS上的Safari上运行。任何有关如何解决或解决问题的想法都将受到欢迎。现在,我最好的解决方法是继续尝试直到我成功,增加每次失败尝试之间的间隔。服务器端存在API没有帮助,因为没有可靠地调用'connected'钩子。

3 个答案:

答案 0 :(得分:4)

众所周知问题http://code.google.com/p/googleappengine/issues/detail?id=4940已被接受。如您所见,问题的状态并未修复。随意给它上星。

答案 1 :(得分:2)

我知道双重发帖很糟糕(发行主演并发布评论)......但我怀疑这个帖子可能比问题评论更受关注^^

就我们而言,它至少是一个文档问题:

https://developers.google.com/appengine/docs/java/channel/javascript仍然 状态“一个onerror调用总是跟着一个onclose调用,并且必须在此事件之后重新创建通道对象”

据我们猜测,只有错误代码400和401(它们是字符串,而不是数字,顺便说一句,所以请注意js代码中的===)。

其他错误代码是不正确的(我们至少记录了-1代码)。

应该有一份文档,涵盖所有错误代码及其(预期)管理。

Atm,我们有一个“通道管理器”,当代码 400或401时,它会重用相同的通道令牌,并确保每个Socket只调用一次onclose。

在此之前,我们试图正确关闭,并使用闪亮的全新令牌重新打开(新的底层Socket):通常我们得到错误400,然后是错误-1。

FUI我们最近在iOS上首次检测到这种行为(回归ftw?之前iOS是花花公子)。在代码-1之后重新打开套接字不是灵丹妙药:有时它会成功(onopen正确调用),然后静默失败(没有收到消息,没有调用onerror)。

通常,我们还注意到桌面浏览器上的行为比移动的浏览器在所有用户代理和平台上更加一致(更多内容:yay!其他问题传入!特别是android ...)

好的,毕竟这篇文章可能很有用。 THX!

[编辑:纠正了一个错误......我们不重用通道对象也不重用套接字对象,只有令牌]

答案 2 :(得分:1)

我就此问题与Google支持小组联系。

当出现错误400时,因为发生了超时(似乎是一分钟)。此超时会生成断开连接(已断开连接的URL,您应该删除数据库的客户端ID)。 然后,必须使用新的客户端ID创建新通道。

但这还不够。我们必须使用这个jquery命令行:$('#wcs-iframe')。remove();
就在js onerror函数内部,然后尝试重新创建频道。