【发布时间】:2013-04-11 12:37:38
【问题描述】:
从事 GAE 项目,我们的一个要求是我们希望能够及时确定用户是否离开了应用程序。目前我们有这个工作,但不可靠,所以我正在研究替代方案。
我们现在这样做的方式是我们有一个函数设置在 JS 中运行,该函数使用 AJAX 调用向 GAE 应用程序发送心跳信号。这工作相对较好,但会产生大量流量和 CPU 使用率。如果我们在几分钟内没有听到客户的心跳,我们确定他们已经离开了应用程序。我们还连接了卸载函数以发送部分消息,再次通过 AJAX 调用。这效果不太好,但大多数时候根本不行。
我们也在使用 Channels API。我注意到的一件事是,当我们的应用程序使用开放通道时,客户端似乎也在以调用http://talkgadget.google.com/talkgadget/dch/bind 的形式发送心跳信号。我相信这是在客户端打开频道时加载的 iFrame 和/或 JS 发生的。
我的问题是,我在服务器端的应用程序能否连接到这些对http://talkgadget.google.com/talkgadget/dch/bind 的调用并将其用作心跳信号?有没有更好的方法来检测客户端是否仍然连接,即使他们没有在客户端主动做任何事情?
【问题讨论】:
-
您同时打开了多少个频道?您需要多快知道有人离开了?您多久向客户发送一次消息?
-
哦,客户端通常是沉默的,还是除了心跳(即聊天消息)之外,它们是否与服务器进行任何通信?
-
每个客户端打开一个通道。目前并发用户的数量很少,但假设我们会为 100 个或更多的客户拍摄。客户端确实会向服务器发送一些消息,但不能保证频率。
-
另外,我想我现在更好奇,如果我们的应用程序能够以某种方式“挂钩”或以其他方式在服务器端检测到这些对talkgadget绑定函数或其他一些文档的调用机制。
-
App Engine 团队承诺会添加一个在线状态功能,该功能会在客户端关闭频道时通知您,但目前无法连接到talkgadget。但莫伊什是专家,也许他会对这个问题发表评论。
标签: google-app-engine heartbeat channel-api