【问题标题】:is there restriction for opening imap connection from same ip address?从同一 IP 地址打开 imap 连接是否有限制?
【发布时间】:2014-04-02 08:27:54
【问题描述】:

您好,我正在实施电子邮件客户端应用程序。我的要求是我需要监控指定 IMAP 服务器中所有可用的邮箱。我为每个邮箱创建了单独的 TCP 连接。但我与 IMAP 服务器断开连接。我正在尝试使用 Gmail/yahoo 进行测试。从同一 IP 到特定 IMAP 服务器打开多个连接是否有任何限制?尤其是在 Gmail 和 Yahoo。

或者无论如何在不使用 IMAP-NOTIFY 的情况下监控单一连接中的所有邮箱似乎在 Gmail/Yahoo 中都不支持...

请帮帮我...

【问题讨论】:

  • 一般来说,很多服务器软件都会内置限制以防止滥用,并且会限制每个帐户的连接数、每个 IP 的连接数。无论您正在构建什么,都开始听起来有点像恶意软件。

标签: imap gmail-imap


【解决方案1】:

这是我之前在 stackoverflow 上回答过的问题,但现在只能通过 wayback machine 获得。问题是关于如何“杀死太多并行 IMAP 连接”。转载如下;核心信息是,出于某种原因,大多数服务器管理员更喜欢拥有较少数量的短期连接,而不是更多在较长时间内处于活动状态的连接,但他们大部分时间都在后台默默地闲置。他们没有得到的是,IMAP 协议的设计考虑了长期连接,并试图防止导致资源浪费,因为客户端会不断重新同步邮箱,因为他们在其中跳来跳去。

原答案如下:

不,这是一个非常错误的想法。 IMAP 的设计使得监控单个邮箱需要一个连接;在大多数 IMAP 服务器实现中,这意味着单个进程。但是,除非用户使用的客户端严重损坏,否则所有这些连接都会进入 IDLE 模式。在 IDLE 中,客户端会被动地收到有关邮箱状态更新的通知。如果禁用这些连接,客户端将不得不主动轮询许多邮箱中的更改。现在自己决定——更糟糕的是,有 10 个进程处于空闲状态,还是有一个进程每两分钟进行一次繁重的轮询?这些解决方案中的哪一个会消耗更多的能源、CPU 时间和 IO 操作?这是并行连接的数量。

第二个问题是关于长期连接的。同样,这是 IMAP 的一个关键方面——每个连接都携带大量相关的状态信息,这些信息获取起来相当昂贵。除非您的服务器实现了某些扩展并且您的客户端使用它们(ESEARCH、CONDSTORE、QRESYNC 是关键位),否则打开邮箱可能需要 O(n) 次操作。我不知道您的用户有多少消息,但您是否真的要转移例如?当您决定终止连接时,250k 消息的消息标志,因为它已经“太长时间”处于活动状态?

最后,任何合理的 IMAP 服务器供应商都提供了一种方法来配置每个用户会话限制的并发进程数。使用它比维护一个临时杀死“未使用”连接的脚本要好得多。

如果您想了解有关同步过程的更多信息,我关于在网络不稳定且资源有限的客户端上使用 IMAP 的论文描述了客户端必须执行哪些操作才能向其用户显示邮箱的更新视图。

【讨论】:

    猜你喜欢
    • 2020-04-28
    • 1970-01-01
    • 2016-12-09
    • 1970-01-01
    • 2018-02-20
    • 2017-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多