IMAP Время простоя - PullRequest
       10

IMAP Время простоя

11 голосов
/ 25 марта 2010

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

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

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

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

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

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

Спасибо

Пол

Ответы [ 2 ]

22 голосов
/ 29 марта 2010

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

1 голос
/ 16 сентября 2015

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...