2013-02-22 43 views
2

我有一个使用通道API的应用程序。连接应该始终处于活动状态(24x7),并且我已经以这样一种方式实现了连接,即每次通道断开连接时,都会自动创建一个新通道。这在大多数情况下都能正常工作,但我有一些情况,其中onError()方法不会被调用(例如,连接的WIFI更改,或者计算机将进入休眠状态并返回)。而我的JS应用程序错误地假设,如果频道不是这样,频道仍然存在。GAE Channel API - 检查套接字是否存在于Javascript中

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

所以我想知道是否有办法检查连接是否在本地活动,这样我就不会无意中在服务器上执行DoS连接。

感谢

回答

3

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

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

+0

但是,通过从服务器发送请求,您如何确定连接是否存活? Channel API不提供任何反馈,无论消息是否成功传递。我可能会发送到一个死信道,但错误地认为它仍然存在。我可以让客户回复。但是,我们再次回到同一问题 – budsiya 2013-02-22 19:04:00

+0

期待频道活着。因此,客户应该定期进行ping。如果您没有收到任何超时期限的频道消息,请在JS中放置一个定时事件。如果频道死了,客户端应该请求一个新频道。 – dragonx 2013-02-22 23:00:29

+0

使sesnse。感谢您的建议。 :) – budsiya 2013-02-23 14:30:54

0

我怕没有选择,但要求服务器发送消息并检查它是否回来在合理的时间框架。

你的JS应用程序可以周期性地查验一些小()静态文件(可能连外GAE),以检查是否连接已断开或电脑去睡觉。这可以更便宜,但不会给你100%的保证。

+0

ping静态文件将让JS知道它可以访问互联网,但它不会指示通道是否仍然存在。 – dragonx 2013-02-22 07:30:34

相关问题