Differenza nei tempi del server
Domanda
Sto sviluppando un sito Web che recupererà i messaggi SMS che sono stati inviati a un gateway. Si accede al gateway tramite un'API, con le richieste nel seguente formato:
http://www.smsgateway.com/?login=myusername&password=mypassword&lasttime=1236164238
Nota che devo tenere traccia dell'ultima volta in cui i messaggi sono stati scaricati - vengono restituiti solo i messaggi ricevuti dopo tale orario.
Il problema è che c'è una differenza di tempo di circa 5 minuti tra i server! Ecco cosa sta succedendo:
- > L'utente invia SMS; il server gateway segna il timestamp alle 11.00 (diciamo che l'ora effettiva è 10.55)
- > Il mio server richiede tutti i messaggi inviati dalle 10.56 in poi - riceve il messaggio sopra e lo aggiunge al database
- > Il mio server richiede tutti i messaggi inviati dalle 10.58 in poi - riceve il messaggio sopra e lo aggiunge di nuovo, poiché è timestamp alle 11.00
- > Il mio server invia un'altra richiesta alle 11.00 - riceve il messaggio e lo aggiunge nuovamente al database
Quindi il mio problema è che l'unico messaggio originale viene ricevuto 3 volte.
La modifica dell'ora del mio server è fattibile, ma non dei server remoti.
Come posso gestirlo senza controllare per vedere se il messaggio è già nel database?
Soluzione
Quando ricevi i messaggi inviati dal 10.56 in poi, Controlla l'ora dell'ultimo messaggio: Di '11:00, quindi La chiamata successiva viene inviata solo alle 11:00 perché hai già ricevuto fino alle 11:00 del tempo del server. In questo modo puoi ridurre i tuoi sondaggi. Anche questo funzionerà per quando il tempo del Server è nella condizione inversa.
ie) Controlla l'ora dell'ultimo messaggio:
nel prossimo sondaggio dal momento dell'ultimo messaggio.
Altri suggerimenti
La tua configurazione di base è vivace, anche se mantieni sincronizzati gli orologi dei due server perderai o raddoppierai i messaggi che condividono i timestamp (che possono essere molti o pochi a seconda della risoluzione del timestamp e del traffico dei messaggi).
Avrai bisogno di un'API diversa per accedere ai messaggi o dovrai richiedere messaggi sovrapposti richiedendo messaggi poiché latest_processed_timestamp - 1
e ordinare i duplicati dalla tua parte.