我想知道它是如何在 Gmail 中实现的,每次您收到电子邮件时,邮件列表都会自动刷新。看起来服务器正在向浏览器发送某种事件,但这怎么可能呢?或者可能很简单:浏览器每隔 2 秒就向服务器请求新消息?但它可能会扼杀性能......</p>
有人有什么想法吗?
编辑:好的,所以如果这是简单的答案,他们如何管理性能?当我从其他帐户向 gmail 帐户发送电子邮件时,视图几乎立即“刷新”。你说的是一个返回真/假的简单函数,但它必须有一些逻辑(数据库连接或读取一些文件)。他们如何管理它?
我想知道它是如何在 Gmail 中实现的,每次您收到电子邮件时,邮件列表都会自动刷新。看起来服务器正在向浏览器发送某种事件,但这怎么可能呢?或者可能很简单:浏览器每隔 2 秒就向服务器请求新消息?但它可能会扼杀性能......</p>
有人有什么想法吗?
编辑:好的,所以如果这是简单的答案,他们如何管理性能?当我从其他帐户向 gmail 帐户发送电子邮件时,视图几乎立即“刷新”。你说的是一个返回真/假的简单函数,但它必须有一些逻辑(数据库连接或读取一些文件)。他们如何管理它?
不确切知道 Gmail 使用哪种技术,但概念是打开一个通道 - 使用基于反向 AJAX、彗星或链轮的技术。
可以把它想象成客户端向服务器请求数据,但服务器一分钟内不会返回,除非它有新邮件。使用这种技术,客户端几乎可以实时显示结果,而不必每 2 秒轮询一次。说得通?
实际上,gmail 正在轮询服务器以获取更新。不过,不像每两秒那样频繁。那将是疯狂的。使用 Tamper Data 进行的一些测试使它看起来可能每 20 秒一次,尽管似乎有多个事件发生,这让它有点困惑。
关于您的编辑,我想他们可能在其数据库中的帐户跟踪上具有最后活动时间戳,客户端轮询查询通过 Ajax 检索该时间戳并与其最后同步进行比较以确定是否需要进行完整更新。
你有简单的答案。Google Mail 通过 AJAX 检查服务器上的新邮件。
它必须是某种 ajax 侦听器,每 X 秒获取一次信息。
我已经为我的一个项目设置了类似的东西。我正在做的是调用一个返回 true 或 false 的函数。如果页面需要刷新,则为 true,否则为 false。然后,如果您有更新,则再次调用以获取实际更新。这样您就不必每次都刷新所有内容......但是如果您有很多用户,服务器上的内容仍然很紧张。
换句话说,就像混乱所说的那样,它正在轮询服务器。