2009-03-04 65 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