【问题标题】:Check thousands of gmail mailboxes from ~1 server从〜1台服务器检查数千个gmail邮箱
【发布时间】:2013-03-11 19:42:19
【问题描述】:

我正在开发一个与 Gmail UI 以及 Gmail 的 IMAP 实现交互的 Chrome 扩展程序。

我的应用程序的后端需要监控每个用户的所有传入电子邮件,并在收到感兴趣的消息/发件人时更新数据库。

我可以设置一个“用户发起的”投票,只要加载我的应用程序,我就会扫描所有新消息,但也有缺点,因为我的应用程序只有在用户使用浏览器时才是最新的。我想随时了解最新情况...

我考虑过对每个用户进行简单的服务器轮询,例如:

For x = 0 to All users
    Fetch ALL msg where UID > lastMessageID
        if msg.sender == something i care about
            UPDATE table...
<repeat>

我还考虑过使用 IMAP IDLE,例如:

For all users, establish imap idle call
    for any user whos imap idle returned
        if msg.sender == something i care about
            UPDATE table...

我想弄清楚的是哪个会更好地扩展,因为我至少需要监控 5-10k 个帐户...

我有什么遗漏吗?对于大量帐户,是否有更简单的方法?

  • 注意,除了扫描消息和更新表之外,我不需要存储任何消息。

【问题讨论】:

    标签: php gmail oauth-2.0 imap gmail-imap


    【解决方案1】:

    实现 IDLE 是一个更好的选择,因为它也不会给服务器带来负担。

    Polling 的情况下,client 有责任监控每个更改。例如,如果从其他客户端(如 Web 界面或通过某些移动设备)删除邮件,那么要监控这种情况,您必须在每次轮询时扫描整个邮箱。

    whereas

    如果是IDLEServer 有责任让您了解邮箱状态发生的任何变化,无论是邮件移动、读取还是删除操作。 此外,IDLE 命令的可扩展性也不应该成为问题。

    【讨论】:

    • 谢谢,有道理。我发现了一些其他引用 IDLE 可扩展性的帖子——比如quora.com/Does-IMAP-IDLE-scale-to-100K+-users——但现在我只需要弄清楚如何实现。我通常是一个 php/javascript 用户——现在正在运行 Ubuntu 服务器——任何关于以我可以产生 1000 个连接/使用 MySQL 等的方式实现 IMAP IDLE(以任何语言)的最佳方式的建议?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-07
    • 2016-05-24
    • 1970-01-01
    相关资源
    最近更新 更多