首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Google App Engine通道API和从客户端发送心跳信号

问Google App Engine通道API和从客户端发送心跳信号
EN

Stack Overflow用户
提问于 2011-03-24 05:47:02
回答 4查看 2.4K关注 0票数 2

在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中,并将其用作心跳信号?有没有更好的方法来检测客户端是否仍然连接,即使他们没有在客户端做任何事情?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-04-11 12:37:38

谷歌已经添加了这个功能:

请参阅https://developers.google.com/appengine/docs/java/channel/overview

跟踪客户端连接和断开

应用程序可以注册,以便在客户端连接到通道或从通道断开连接时收到通知。

您可以在appengine-web.xml:中启用此入站服务

票数 3
EN

Stack Overflow用户

发布于 2011-03-24 06:34:18

目前,通道API预先向您收取通道将消耗的两个小时的所有CPU时间的费用,因此向死通道发送消息可能比向服务器发送一堆心跳消息更便宜。

https://groups.google.com/d/msg/google-appengine/sfPTgfbLR0M/yctHe4uU824J

我会尝试将“请确认”参数附加到每第N条消息(交错以避免每个客户端都确认一条消息)。如果其中两个被忽略,则将通道静音,直到收到该客户端的声音。

票数 1
EN

Stack Overflow用户

发布于 2011-03-24 07:05:53

您当前不能使用Channel API来确定用户是否仍在线。你现在最好的选择取决于在用户离线时尽快知道它的重要性。

如果你只是想知道他们是否离线,这样你就可以停止发送消息,或者这不是你立即知道的关键,你可以简单地利用常规的交互来进行ping。当您向客户端发送更新,并且您已经有一段时间没有收到他们的任何消息时,请使用“ping request”标记消息,并让客户端在收到此类标记的消息时发送HTTP ping。这样,在你给他们发消息后不久,你就会知道他们已经走了。您也不会增加很多额外的开销,因为如果您没有收到来自它们的任何其他消息,则它们只需要发送显式的ping。

如果您期望长时间处于不活动状态,并且及时了解它们何时离线很重要,那么您必须让它们按照您的建议按计划发送ping。您仍然可以在其他请求上使用搭载ping的技巧来最小化它们,并且您应该尽可能地设置ping之间的间隔,以减少负载。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5412037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档