0

我正在开发一个网站,它将检索已发送到网关的 SMS 消息。网关通过 API 访问,请求格式如下:

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

请注意,我必须跟踪上次下载消息的时间 - 只有在该时间之后收到的消息才会返回。

问题是服务器之间有大约5分钟的时间差!这是正在发生的事情:

->用户发送短信;网关服务器在上午 11 点为其添加时间戳(假设实际时间是上午 10 点 55 分)

-> 我的服务器请求从 10.56 开始发送的所有消息 - 接收上述消息并将其添加到数据库

->我的服务器请求从 10.58 开始发送的所有消息 - 接收上述消息并再次添加它,因为它的时间戳是上午 11 点

->我的服务器在 11:00 发送另一个请求 - 接收消息并再次将其添加到数据库中

所以我的问题是一条原始消息被接收了 3 次。

更改我的服务器时间是可行的,但不是远程服务器。

如何在不检查消息是否已在数据库中的情况下处理此问题?

4

2 回答 2

3

当您收到从 10.56 开始发送的消息时,请检查最后一条消息时间:假设上午 11:00,然后下一个呼叫仅在上午 11:00 发送,因为您已经收到了服务器时间上午 11:00。这样你可以减少你的投票。当服务器的时间处于相反状态时,即使这也适用。

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

在下一次轮询中检查上一条消息的时间。

于 2009-03-04T11:21:53.437 回答
1

您的基本设置是活泼的,即使您使两个服务器的时钟保持同步,您也会丢失或加倍共享时间戳的消息(取决于时间戳分辨率和消息流量,这些消息可能很多也可能很少)。

您将需要不同的 API 来访问消息,或者您必须通过请求消息来请求重叠消息,latest_processed_timestamp - 1并整理出您身边的重复消息。

于 2009-03-04T11:34:17.293 回答