2010-03-25 15 views
10

Diciamo che sto usando IMAP IDLE per monitorare le modifiche in una cartella di posta.Timeout inattività IMAP

Le specifiche IMAP indicano che le connessioni IDLE dovrebbero rimanere attive per massimo 30 minuti, ma si consiglia di selezionare un numero inferiore di minuti, ad esempio 20 minuti, quindi annullare l'inattività e riavviare.

Mi chiedo cosa succederebbe se il contenuto della posta fosse cambiato tra la cancellazione inattiva e il nuovo inattivo creato. Potresti perdere un'e-mail. Dato che RECENT è un po 'vago, questo potrebbe portare a ottenere una lista di messaggi prima che il vecchio inattivo finisca, e inizia un nuovo inattivo.

Ma questo è quasi lo stesso del polling ogni 20 minuti e vanifica alcuni dei vantaggi del minimo.

In alternativa, è possibile avviare una nuova sessione inattiva prima di terminare quella in scadenza.

Ma in ogni caso, penso che questo problema sia già stato risolto, quindi qui sto chiedendo delle raccomandazioni.

Grazie,

Paul

risposta

21

Come sapete, lo scopo del comando IMAP IDLE (RFC 2177) è quello di rendere possibile avere gli aggiornamenti di stato del server di trasmissione al cliente in tempo reale. In questo contesto, gli aggiornamenti di stato indicano risposte del server IMAP senza tag come EXISTS, RECENT, FETCH o EXPUNGE che vengono inviate quando arrivano nuovi messaggi, lo stato dei messaggi viene aggiornato o viene rimosso un messaggio.

Tuttavia, questi IMAP aggiornamenti di stato possono essere restituiti da qualsiasi comando IMAP, non solo il comando IDLE - per esempio, il comando NOOP (vedi RFC 3501 sezione 6.1.2) può essere utilizzato per eseguire il polling per aggiornamenti del server pure (anticipa il comando IDLE). Solo IDLE rende possibile ottenere questi aggiornamenti in modo più efficiente - se non si utilizza il comando IDLE, gli aggiornamenti del server verranno semplicemente inviati dal server quando il client esegue un altro comando (o anche quando nessun comando è in corso in alcuni casi) - vedi RFC 3501 sezione 5.2 e 5.3 per i dettagli.

Ciò significa che se un messaggio è cambiato tra l'IDLE l'annullamento e il nuovo comando IDLE, gli aggiornamenti di stato non devono essere persi, così come non si perdono se non hai mai usato IDLE, in primo luogo (e l'uso NOOP ogni pochi secondi, ad esempio) - devono essere inviati semplicemente dopo l'avvio del nuovo comando IDLE.

0

Un altro approccio sarebbe quello di ricordare l'ultimo UID più alto della cartella monitorata. Ogni volta che pensi ci sono possibilità che ti sei perso l'aggiornamento. Effettua una ricerca nel modo seguente: *