Разница во времени сервера - PullRequest
0 голосов
/ 04 марта 2009

Я разрабатываю веб-сайт, который будет получать SMS-сообщения, отправленные на шлюз. Доступ к шлюзу осуществляется через API с запросами в следующем формате:

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

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

Проблема в том, что разница между серверами составляет около 5 минут! Вот что происходит:

-> Пользователь отправляет SMS; временные метки сервера шлюза в 11.00 (скажем, фактическое время 10.55)

-> Мой сервер запрашивает все сообщения, отправленные начиная с 10.56 - получает указанное выше сообщение и добавляет его в базу данных

-> Мой сервер запрашивает все сообщения, отправленные с 10.58 и далее - получает вышеуказанное сообщение и добавляет его снова, так как его отметка установлена ​​в 11:00

-> Мой сервер отправляет еще один запрос в 11.00 - получает сообщение и снова добавляет его в базу данных

Так что моя проблема в том, что одно оригинальное сообщение принимается 3 раза.

Изменение времени моего сервера выполнимо, но не удаленных серверов.

Как я могу справиться с этим, не проверяя, находится ли сообщение в базе данных?

Ответы [ 2 ]

3 голосов
/ 04 марта 2009

Когда вы получаете сообщения, отправленные с 10.56, проверьте время последнего сообщения: Скажи 11:00 утра, затем Следующий звонок отправляется только в 11:00 утра, потому что вы уже получили до 11:00 утра сервера. Таким образом, вы можете уменьшить свои опросы. Даже это будет работать, когда время сервера находится в обратном состоянии.

т.е.) Проверка времени последнего сообщения:

в следующем опросе с момента последнего сообщения.

1 голос
/ 04 марта 2009

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

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

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