Тайм-аут простоя IMAP

Допустим, я использую IMAP IDLE для отслеживания изменений в почтовой папке.

Спецификация IMAP говорит, что соединения IDLE должны оставаться активными не более 30 минут, но рекомендуется выбрать меньшее количество минут — скажем, 20 минут, затем отменить бездействие и перезапустить.

Мне интересно, что произойдет, если содержимое почты изменится между отменой простоя и созданием нового простоя. Электронное письмо потенциально может быть пропущено. Учитывая, что RECENT немного расплывчато, это может привести к получению списка сообщений до того, как закончится старое бездействие и начнется новое бездействие.

Но это почти то же самое, что и опрос каждые 20 минут, и сводит на нет некоторые преимущества бездействия.

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

Но в любом случае, я думаю, что эта проблема уже решена, поэтому здесь я прошу рекомендаций.

Спасибо,

Павел


person Paul    schedule 25.03.2010    source источник


Ответы (2)


Как вы знаете, цель команды 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.

person Lukas Pokorny    schedule 29.03.2010

Другим подходом было бы запоминание последнего самого высокого uid отслеживаемой папки. Всякий раз, когда вы думаете, что есть вероятность, что вы пропустили обновление. Выполните поиск следующим образом: *

person Seraj Ahmad    schedule 16.09.2015