2017-05-30 6 views
-1

注文を作成し、HTTPポスト経由でサーバーに送信するアプリケーションがあります。HTTP応答がクライアントに届かないと、サーバーは例外を送出しますか?

  1. クライアントは
  2. Serverは
  3. サーバーが応答
  4. Serverは、クライアントが応答を受信し、それを処理し、このため
  5. にさらにいくつかの操作を行い送信し、それを処理するHTTP要求として順序を送信します。

私はステップ3で何について質問されましたが、応答はクライアントに届かず途中で迷子になります。次に、クライアントは同じ注文を再送しようとします。そして、これは重複した注文問題を導入するでしょう。そしてこれに取り組む方法。

私は、クライアントが一意のIDを生成してサーバーに送信するので、クライアントが2回目に送信すると、サーバーは重複した注文であることを知り、前の応答のみを返します。

しかし、私は間もなくHTTPがTCPに基づいて構築されていることを覚えています。データ接続には3ウェイハンドシェイクが必要です。つまり、

クライアントの観点からは、クライアントがサーバーからの応答を受信しない場合は、タイムアウトまで接続が維持され、クライアントに知らせるための例外がスローされます。

私の質問は以下のとおりです。

  1. サーバーの観点から、それが応答を送信した後、どのように応答がクライアントに到達した決定することができますか?

  2. クライアントがメッセージを受信した後にのみ接続が閉じられることを保証するために、トランスポートレイヤーで3方向ハンドシェイク接続を終了する必要があります。したがって、途中でメッセージが失われた場合、サーバーは例外をトリガーする必要があります。そうですか?

  3. この場合、問題は、ステップ3で例外がない場合、サーバーがステップ4のみを実行するようにすることで簡単に解決できますか?私の全体的なアイデアが間違っている場合、この問題に対する他の解決策はありますか?

おかげ

答えて

0

全体的なアイデアは間違っています。 idempotenceを検索する必要があります。基本的にすべてのトランザクションは冪等でなければなりません。つまり、それを2回以上適用することは、それを1回適用する以上の効果はありません。これは、一般に、トランザクションが完了したときにサーバに記録されるユニークなトランザクションシーケンス番号を介して実装されます。

関連する問題