在 GAE 项目上工作,我们的一个要求是我们希望能够及时确定用户是否离开了应用程序。目前我们有这个工作,但不可靠,所以我正在研究替代方案。
我们现在这样做的方式是我们有一个函数设置在 JS 中运行,该函数使用 AJAX 调用向 GAE 应用程序发送心跳信号。这工作相对较好,但会产生大量流量和 CPU 使用率。如果我们在几分钟内没有听到客户的心跳,我们确定他们已经离开了应用程序。我们还连接了 unload 函数以发送部分消息,再次通过 AJAX 调用。这效果不太好,但大多数时候根本没有。
我们也在使用 Channels API。我注意到的一件事是,当我们的应用程序使用开放频道时,客户端似乎也在以调用http://talkgadget.google.com/talkgadget/dch/bind的形式发送心跳信号。我相信这是在客户端打开频道时加载的 iFrame 和/或 JS 发生的。
我的问题是,我在服务器端的应用程序能否连接到这些对http://talkgadget.google.com/talkgadget/dch/bind的调用并将其用作心跳信号?有没有更好的方法来检测客户端是否仍然连接,即使他们没有主动在客户端做任何事情?