在从事 GAE 项目时,我们的一个要求是我们希望能够及时确定用户是否已离开应用程序。目前我们已经做到了这一点,但不可靠,所以我正在研究替代方案。
我们现在执行此操作的方法是设置一个函数,在 JS 中运行一段时间间隔,使用 AJAX 调用向 GAE 应用程序发送心跳信号。这种方式效果相对较好,但会产生大量流量和 CPU 使用率。如果我们在几分钟内没有听到客户端的心跳,我们就确定他们已经离开了应用程序。我们还连接了卸载函数来发送部分消息,再次通过 AJAX 调用。这不太有效,但大多数时候根本不起作用。
我们还使用 Channels API。我注意到的一件事是,我们的应用程序在使用开放 channel 时,客户端似乎也在以调用 http://talkgadget.google.com/talkgadget/dch/bind 的形式发送心跳信号。 。我相信这是在客户端打开 channel 时加载的 iFrame 和/或 JS 中发生的。
我的问题是,我在服务器端的应用程序可以如何 Hook 这些对 http://talkgadget.google.com/talkgadget/dch/bind 的调用并用它作为心跳信号?有没有更好的方法来检测客户端是否仍然连接,即使他们没有在客户端中主动执行任何操作?
最佳答案
Google 添加了此功能:
参见https://developers.google.com/appengine/docs/java/channel/overview
Tracking Client Connections and Disconnections
Applications may register to be notified when a client connects to or disconnects from a channel.
You can enable this inbound service in appengine-web.xml:
关于google-app-engine - Google App Engine Channels API 并从客户端发送心跳信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5412037/