2009-03-04 66 views
0

我正在开发一个网站,将检索已发送到网关短信。该网关通过API访问,在以下格式的要求:那我有跟踪上一次的消息被下载差异服务器次

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

通知 - 在该时间后收到的邮件将被退回。

的问题是,有的服务器之间进行约5分钟的时间差!这里发生的事情:

- >用户发送短信;网关服务器在上午11点时间戳,(比方说实际时间是上午10时55分)

- >我的服务器请求从10.56起发送的所有邮件 - 收到上述消息,并把它添加到数据库

- >我的服务器请求从10.58起发送的所有消息 - 接收上述消息并且再次增加了它,因为它是在上午11点

时间戳 - >我的服务器在11.00发送另一个请求 - 接收该消息,并将其添加到数据库再次

所以我的问题是,一个原始的消息正在接收3次。

改变我的服务器的时间做,能,而不是远程服务器。

我怎样才能解决这个而不检查,看看消息是否已经在数据库中?

回答

3

当您收到从10.56起发送的消息,检查最后消息时间: 说上午11点,然后因为你已经高达上午11:00接到 下次通话也只是在上午11:00发服务器的时间。 这样你可以减少你的民意调查。 即使这将适用于服务器的时间处于反向状态。

IE)检查最后一条消息的时间:

从最后一条消息的时间下次轮询检查

+0

感谢您的帮助,这看起来像前进的道路。 – 2009-03-04 11:50:42

1

你的基本设置是活泼的,即使你保持两个服务器的时钟同步,你要么失去或共享时间戳(可以是多还是少取决于时间戳分辨率和消息业务)消息翻倍。

您将需要使用不同的API来访问消息,或者您必须通过请求消息来请求重叠消息,因为它们是latest_processed_timestamp - 1,并将重复项排列在您身边。

+0

好点 - 我没有选择使用不同的提供商,网关也不会将消息推送给我,所以我会实施时间戳-1并检查欺骗。非常感谢您的建议。 – 2009-03-04 11:49:59