2009-03-04 2 views
0

Ich entwickle eine Website, die SMS-Nachrichten abrufen wird, die an ein Gateway gesendet wurden. Das Gateway wird über eine API, mit den Anfragen im folgende Format zugegriffen:Unterschied in Serverzeiten

http://www.smsgateway.com/?login=myusername&password=mypassword&lasttime=1236164238 

Beachten Sie, dass ich das letzte Mal zu verfolgen habe Nachrichten heruntergeladen wurden - nur die Nachrichten nach diesem Zeitpunkt eingehen, werden zurückgegeben.

Das Problem ist, dass es einen Zeitunterschied von ca. 5 Minuten zwischen den Servern gibt! Hier ist, was passiert:

-> Benutzer sendet SMS; Gateway-Server es um 11.00 Uhr Zeitstempel (sagen wir mal tatsächliche Zeit ist 10.55)

-> Mein Server Anfragen alle von 10,56 ab gesendeten Nachrichten - erhält die obige Nachricht und fügt sie in die Datenbank

-> Mein Server-Anfragen Alle Nachrichten von 10.58 ab gesendet - die obige Nachricht empfängt und fügt sie wieder, da es sich um 11.00 Uhr

timestamped -> Mein Server sendet eine weitere Anforderung, um 11.00 Uhr - empfängt die Nachricht und fügt sie einmal in die Datenbank mehr

Also mein Problem ist, dass die eine ursprüngliche Nachricht 3 mal empfangen wird.

Ändern der Zeit meines Servers ist möglich, aber nicht die Remote-Server.

Wie kann ich damit umgehen, ohne zu überprüfen, ob die Nachricht bereits in der Datenbank ist?

Antwort

3

Wenn Sie die Nachrichten von 10.56 ab gesendet erhalten, prüfen Sie die letzte Nachricht Zeit: Say 11.00 Uhr, dann Nächster Anruf nur erst um 11.00 Uhr gesendet werden, da Sie bereits bis 11.00 Uhr von erhalten hatten Zeit des Servers. Auf diese Weise können Sie Ihre Umfragen reduzieren. Auch dies funktioniert, wenn die Serverzeit im umgekehrten Zustand ist. Prüfen

ie) für die Zeit letzte Botschaft:

in der nächsten Umfrage Check von den letzten Nachricht Zeit.

+0

Danke für Ihre Hilfe, das sieht nach dem Weg aus. –

1

Ihre grundlegende Konfiguration ist rassig, selbst wenn Sie die Uhren der zwei Server synchron halten, werden Sie entweder Nachrichten verlieren oder verdoppeln, die Zeitstempel teilen (die abhängig von Zeitstempelauflösung und Nachrichtenverkehr viele oder wenige sein können).

Sie benötigen entweder eine andere API für den Zugriff auf die Nachrichten oder Sie müssen überlappende Nachrichten anfordern, indem Sie seit latest_processed_timestamp - 1 Nachrichten anfordern und die Duplikate auf Ihrer Seite sortieren.

+0

Guter Punkt - Ich habe nicht die Möglichkeit, einen anderen Anbieter zu verwenden, und das Gateway wird die Nachrichten nicht an mich übertragen, daher werde ich den Zeitstempel -1 implementieren und nach Duplikaten suchen. Vielen Dank für Ihren Rat. –