【问题标题】:How does incoming mail notification on Gmail works?Gmail 上的收到邮件通知如何工作?
【发布时间】:2010-11-02 13:13:46
【问题描述】:

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

有人有什么想法吗?

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


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

【问题讨论】:

    标签: events email gmail


    【解决方案1】:

    gmail 实际上是在轮询服务器以获取更新。不过,不像每两秒那样频繁。那将是疯狂的。使用 Tamper Data 进行一些测试后,它看起来可能每 20 秒一次,但似乎有多个事件发生,这让它有点困惑。

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

    【讨论】:

      【解决方案2】:

      你的答案很简单。 Google Mail 通过 AJAX 检查服务器上的新邮件。

      【讨论】:

        【解决方案3】:

        一定是某种 ajax 监听器,每 X 秒获取一次信息。

        我已经为我的一个项目设置了类似的设置。我正在做的是调用一个返回 true 或 false 的函数。如果页面需要刷新,则为 true,否则为 false。然后,如果您有更新,则再次调用以获取实际更新。这样您就不必每次都刷新所有内容...但是如果您有很多用户,服务器上的工作仍然很紧张。

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

        【讨论】:

          【解决方案4】:

          不确切知道 Gmail 使用哪种技术,但其概念是打开一个通道 - 使用基于反向 AJAX、comet 或 sprocket 的技术。

          把它想象成客户端向服务器请求数据,但服务器一分钟内不会返回,除非它有新邮件。使用这种技术,客户端几乎可以实时显示结果,而不必每 2 秒轮询一次。有意义吗?

          【讨论】:

          • 这些技术大多使用轮询来模拟通道的存在。实际上,保持 TCP 连接打开,以便服务器将更新数据向下发送到客户端,称为“服务器推送”,这是 1994 年的热门新技术。
          • simulate 是目前浏览器能做的最好的。如果允许您从客户端计算机上的应用程序中打开端口并侦听它们,则可以使用服务器推送技术。浏览器上下文中没有真正的服务器推送。我提到的方法提供了使用可用轮询技术模拟它的机制。这也是 Facebook 和其他 IM 提供商在您的朋友在聊天框中输入内容时更新您的窗口的方式。
          • 这不太对,瑞恩。有服务器推送之类的东西,但没有人使用它,因为它在服务器上非常浪费资源。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-06-08
          • 2015-05-29
          • 2015-07-15
          • 2015-10-21
          • 2011-02-01
          • 2022-06-17
          • 2012-02-18
          相关资源
          最近更新 更多