【问题标题】:IMAP Idle TimeoutIMAP 空闲超时
【发布时间】:2011-01-31 13:48:17
【问题描述】:

假设我正在使用 IMAP IDLE 来监控邮件文件夹中的更改。

IMAP 规范规定空闲连接最多只能保持活动状态 30 分钟,但建议选择较少的分钟数 - 例如 20 分钟,然后取消空闲并重新启动。

我想知道如果邮件内容在空闲取消和新空闲被创建之间发生变化会发生什么。可能会错过一封电子邮件。鉴于 RECENT 有点模糊,这可能会导致在旧空闲结束之前获取消息列表,并开始新的空闲。

但这几乎与每 20 分钟轮询一次相同,并且抵消了空闲的一些好处。

或者,可以在终止即将到期的会话之前启动一个新的空闲会话。

但无论如何,我认为这个问题已经解决了,所以我在这里寻求建议。

谢谢,

保罗

【问题讨论】:

    标签: imap


    【解决方案1】:

    如您所知,IMAP IDLE 命令 (RFC 2177) 的目的是使服务器能够将状态更新实时传输到客户端。在这种情况下,状态更新是指当新消息到达、消息状态更新或消息被删除时发送的未标记的 IMAP 服务器响应,例如 EXISTS、RECENT、FETCH 或 EXPUNGE。

    但是,这些 IMAP 状态更新 可以由任何 IMAP 命令返回,而不仅仅是 IDLE 命令 - 例如,NOOP 命令(请参阅RFC 3501 第 6.1.2 节)可用于轮询服务器更新(它早于 IDLE 命令)。 IDLE 只会更有效地获取这些更新 - 如果您不使用 IDLE 命令,服务器更新 将在客户端执行另一个命令时(或者即使没有命令)由服务器发送在某些情况下正在进行中)- 详情请参阅RFC 3501 第 5.2 和 5.3 节。

    这意味着如果消息在 IDLE 取消和新 IDLE 命令之间发生更改,状态更新不应该丢失,就像如果您从未在第一次使用 IDLE 时它们不会丢失一样放置(例如,每隔几秒使用一次 NOOP)——它们应该在新的 IDLE 命令启动后简单地发送。

    【讨论】:

      【解决方案2】:

      另一种方法是记住被监视文件夹的最后一个最高 uid。每当您认为有可能错过更新时。进行如下搜索:*

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多