質問

ゲートウェイに送信された SMS メッセージを取得する Web サイトを開発しています。ゲートウェイには、次の形式のリクエストを使用して API 経由でアクセスします。

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

メッセージが最後にダウンロードされた時刻を追跡する必要があることに注意してください。その時刻以降に受信したメッセージのみが返されます。

問題は、サーバー間に約 5 分の時差があることです。何が起こっているかは次のとおりです。

-> ユーザーが SMS を送信します。ゲートウェイ サーバーのタイムスタンプは午前 11 時です (実際の時刻は午前 10 時 55 分だとします)。

->サーバーは 10.56 以降に送信されたすべてのメッセージを要求します - 上記のメッセージを受信し、データベースに追加します

->サーバーは 10.58 以降に送信されたすべてのメッセージを要求します。タイムスタンプが午前 11 時であるため、上記のメッセージを受信して​​再度追加します。

->サーバーは 11:00 に別のリクエストを送信します - メッセージを受信して​​データベースに再度追加します

したがって、私の問題は、1つの元のメッセージが3回受信されていることです。

サーバーの時刻を変更することは可能ですが、リモート サーバーは変更できません。

メッセージがすでにデータベースにあるかどうかを確認せずに、この問題を処理するにはどうすればよいでしょうか?

役に立ちましたか?

解決

10.56 以降に送信されたメッセージを受信した場合は、最後のメッセージ時刻を確認します。午前11:00に言ってから、次の電話は、サーバーの時間の午前11時まで既に受け取っていたため、午前11:00にのみ送信します。こうすることで投票数を減らすことができます。これは、サーバーの時間が逆の状態にある場合でも機能します。

例)最後のメッセージの時刻を確認します。

次回のポーリングでは、最後のメッセージの時刻からチェックします。

他のヒント

基本的な設定は危険で、たとえ 2 つのサーバーの時計を同期させていたとしても、タイムスタンプを共有するメッセージ (タイムスタンプの解像度とメッセージ トラフィックに応じて、メッセージの数が多くなったり少なくなったりする可能性があります) が失われるか倍増することになります。

メッセージにアクセスするには別の API が必要になるか、メッセージをリクエストして重複するメッセージをリクエストする必要があります。 latest_processed_timestamp - 1 そしてあなたの側で重複を整理してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top