0

モバイル デバイスから非常に大きな HTTP リクエストを送信する必要があります。どのような状況でリクエストが失われますか (送信されたデータを再送信する必要があるため)?

たとえば、無線接続が数秒間ない場合はどうなりますか? 私が制御できないネットワーク内の決定に依存していますか?

サーバーにタイムアウトはありません。私はクライアントを制御しており、クライアントは安定していると想定できます。呼び出しはいくつかの Curl ライブラリ (POSIX C++、組み込み Linux) に入りますが、それを変更できる範囲は限られています。

4

2 に答える 2

0

「一部」が言ったように、アップロードをパーツに分割し、番号を付けて、もう一方の端で再組み立てする必要があります。私はかつてそれを行うためのWebサービスを作成したので、クライアントは特定の部分が正しいチェックサム(たとえば、SHA-1ハッシュ)で受信されたことを確認できます。

タイムアウトが原因で確認が得られない場合、またはハッシュが一致しない場合、クライアントはパーツを再送信する必要があります。予想されるネットワーク速度に応じて、各チャンクを1〜10 kbのように十分に小さくすることをお勧めします(遅いネットワークの小さいチャンク)。

于 2011-01-25T14:08:07.190 に答える
0

リクエストが失われるいくつかの状況:

  • モバイルユニットの電源が失われました
  • 移動機がネットにつながらなくなる(電波が届かない)
  • モバイル デバイスでのプログラミング エラー/メモリ障害
  • 同時にデータを送信しようとするモバイル デバイスが多すぎます
  • 無線リンクへの外部干渉
  • ネットワーク インフラストラクチャでの電力損失
  • 作業者が誤って切断したケーブル
  • 火事、水害、地震etc...

そして、メモリ不足、リクエストのタイムアウトなど、サーバー側にすべての問題があります...

可能であれば、情報をより小さなセグメントに分割してみてください。何か問題が発生した場合、再送信する必要がある情報が少なくなります。


2011 年 1 月 27 日更新:

うまくいかないことが多すぎると言うと、少し悲観的に聞こえるかもしれません。

送信機側では、サーバーが何らかの確認応答を送信した場合、送信が成功したかどうかを確認するのは非常に簡単です。転送要求の応答として、または別のクエリによって送信できます。

サーバー側で何を使用しているかによっては、接続が失われたかどうかを検出できる場合があります (その要求のすべてのデータも失われた可能性があります)。私の意見では、送信が成功したかどうかを確認し、失敗した場合は再送信するのは送信者の責任です。

あなたが持っているデータの種類はわかりませんが、それを小さなチャンクに分割することは可能だと確信しています。ただし、それが望ましいかどうかは判断できません。ただし、モバイル デバイスを使用していて、データの転送に時間がかかる場合は、おそらくそうです。

于 2011-01-25T11:24:41.563 に答える