GAE Channel API - 从Javascript检查套接字是否处于活动状态

时间:2013-02-22 05:28:24

标签: javascript google-app-engine channel-api ajax-push

我有一个使用渠道API的应用程序。连接应该始终处于活动状态(24x7)并且我已经实现了这种方式,每次通道断开连接时,都会自动创建一个新通道。这在大多数情况下都可以正常工作,但我有一些情况,其中onError()方法没有被调用(例如,连接的WIFI更改,或计算机进入睡眠状态并返回)。而我的JS应用程序错误地认为频道还没有存在。

我想到的一个解决方案是ping服务器并要求发送消息。就像Keep Alive一样。但这对服务器来说是一个很大的负担。 (例如,每10秒发送一次ping请求的1000个客户端就像每秒100个请求一样)

所以我想知道是否有办法检查连接是否在本地存在,以便我无意中在我的服务器上进行DoS连接。

由于

2 个答案:

答案 0 :(得分:3)

您可以创建一个GAE cron作业,告诉您的服务器发送保持活动消息,而不是让客户端请求它。这样,无论你拥有多少个客户,你每10秒只有一个请求。

您需要在memacache / datastore中存储活动客户端列表。

答案 1 :(得分:0)

我担心没有选择,只能要求服务器发送消息并检查它是否在合理的时间范围内回来。

您的JS应用程序可以定期ping一些小的()静态文件(甚至可能在GAE 之外)以检查连接是否中断或计算机是否正在休眠。这可能会更便宜,但不会给你100%的保证。