Gmail上的传入邮件通知如何运作?

时间:2009-06-12 17:52:28

标签: events email gmail

我想知道它是如何在Gmail中实现的,每次收到电子邮件时,邮件列表都会自动刷新。看起来服务器正在向浏览器发送某种事件,但它怎么可能呢?或者也许它很简单:浏览器每次让我们说2秒钟就向服务器询问新消息?但它可能会破坏性能......

任何人都有一些想法?

编辑:好的,如果这是简单的答案,他们如何管理绩效?当我从其他帐户向Gmail帐户发送电子邮件时,视图几乎立即“刷新”。你说的是一个返回true / false的简单函数,但它必须有一些逻辑(db连接或读取一些文件)。他们是如何管理的?


另见:How is GMail Chat able to make AJAX requests without client interaction?

4 个答案:

答案 0 :(得分:11)

不确切知道Gmail使用哪种技术,但概念是打开一个频道 - 使用反向AJAX,彗星或链轮技术。

将其视为请求服务器获取数据的客户端,但除非有新邮件,否则服务器不会返回一分钟。使用这种技术,客户端几乎可以以实时方式显示结果,并且不必每2秒轮询一次。有意义吗?

答案 1 :(得分:3)

实际上,gmail是在轮询服务器以获取更新。但不是每两秒钟一次。那将是疯狂的。使用Tamper Data进行的一些测试使它看起来可能每隔20秒,尽管似乎有多个事件会让人感到困惑。

关于您的编辑,我想他们可能在其数据库中的帐户跟踪上有最后活动时间戳,客户端轮询查询通过Ajax检索并与上次同步进行比较以确定是否需要执行完整更新

答案 2 :(得分:2)

你有简单的答案。 Google Mail通过AJAX检查服务器上的新消息。

答案 3 :(得分:2)

它必须是某种类型的ajax侦听器,每X秒获取一次信息。

我已经为我的一个项目设置了类似的东西。我正在做的是调用一个返回true或false的函数。如果需要刷新页面,则为True,否则为false。然后,如果您有更新,则进行另一次调用以获取实际更新。这样你就不必每次都刷新一切......但是如果你有很多用户,它在服务器上仍然很激烈。

换句话说,就像混乱说的那样,它正在轮询服务器。