0

相互に通信する Web サービスとモバイル アプリケーションを作成しました。すべてが機能しているとき、それはうまく機能します。サーバーが応答しないと、サーバーが故障し始めます。

モバイル デバイスは、一連のレコードを含むメッセージをサーバーに送信します。サーバーでレコードを取得することは決して問題ではないようです。レコードを取得し、更新を受信したという応答をモバイル デバイスに返します。問題は、モバイル デバイスが常に応答を受け取るとは限らないため、更新のためにそれらのレコードを再度送信してはならないことを認識していないことです。

次回レコードを再度送信すると、レコードが重複しています。どうすればこれを解決できますか?

アイデア 1) モバイル デバイスで一意のトランザクション番号を作成し、サーバーと比較して、レコードが既にアップロードされているかどうかを確認します。次に、そのレコードを書き込まず、それが書き込まれたという応答を送り返そうとしないでください。

アイデア 2) レコードをサーバーに送信しますが、レコードを書き込む前に、受信したことをモバイル デバイスに応答します。このようにして、モバイルデバイスはそれらにタグを付けてから、サーバーに別の応答を送信して、それらを書き込むように指示できます。この時点で、モバイル デバイスは、応答があるかどうかをほとんど気にしません。サーバーがメッセージを受信したかどうかはわかりません。

これらのアイデアのいずれかを確認するか、まったく異なるアイデアを持つ、これを処理する方法に関するアイデアを探しています。

4

1 に答える 1

0

サーバーから正常な応答が返されたときにデバイスが解決しようとするログを作成することになりました。

アイテムを行のバッチとしてタグ付けし、サーバーに送信します。それらが完成したら、アイテムのバッチ内の各ライン アイテムの成功または失敗に関するログを作成し、そのログをファイル システムに保存します。

モバイル デバイスがサーバーからの応答を受信できなかった場合、まれにサーバーにバッチ番号を問い合わせます。サーバーがそのバッチのステータスで応答しない場合、サーバーはそれを受信して​​いないと見なし、それらのアイテムを別のアップロード試行のためにコメントします。応答があれば、成功と失敗を 1 行ずつ処理し、それに応じてモバイル デバイス上のアイテムにマークを付けます。モバイル デバイスが次のアップロードでログについて尋ねない場合、サーバーはバッチのライフサイクルが完了したと見なし、そのログを保持する必要がなくなります。その後、削除されます。

サーバーは、特定のデバイスからの要求が成功し、ログについて聞く必要がなくなるまで、ログを削除しません。したがって、サーバーにログ 1 があり、デバイスが次のアップロードでそのログについて聞き返すように要求しない場合、サーバーは、デバイスが必要な応答を取得したか、もう気にしないと仮定して、そのログを削除します。

于 2013-11-15T21:00:14.177 に答える