Проверьте тысячи почтовых ящиков Gmail с ~1 сервера

Я работаю над расширением Chrome, которое взаимодействует как с пользовательским интерфейсом Gmail, так и с реализацией IMAP в Gmail.

Серверная часть моего приложения должна отслеживать все входящие электронные письма для каждого пользователя и обновлять базу данных при получении сообщения / интересующего отправителя.

Я могу настроить опрос, инициированный пользователем, при котором я сканирую все новые сообщения, когда у них загружено мое приложение, но есть недостатки, поскольку мое приложение обновляется только тогда, когда пользователь находится в браузере. Я бы хотел быть в курсе всех событий...

Я рассмотрел простой опрос сервера каждого пользователя, например:

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-10 тысяч аккаунтов...

Я что-то пропустил? Есть ли более простой способ сделать это для большого количества аккаунтов?

  • Обратите внимание, кроме сканирования сообщений и обновления таблицы - мне не нужно хранить ни одно из сообщений.

1 ответ

Решение

Реализация IDLE - лучший вариант, так как он также не будет загружать сервер.

В случае Polling это ответственность client следить за всеми изменениями. Например, если почта удалена с другого клиента (например, через веб-интерфейс или через мобильное устройство), то для мониторинга таких ситуаций вам придется сканировать все почтовые ящики каждый раз, когда вы проводите опрос.

whereas

В случае IDLE это ответственность Server чтобы сообщить вам обо всех изменениях, которые происходят в состоянии почтового ящика, будь то операция перемещения, чтения или удаления почты. Также масштабируемость не должна быть проблемой с командой IDLE.

Другие вопросы по тегам