5

GET リクエストを使用してサーバーから画像を取得しようとしています。画像は常に変化しているため、毎秒数回画像を取得したいと考えています (画像を表示し、最終的にはビデオを模倣することを目的としています)。ただし、GET 要求には問題があります。どんなに速く画像を取得しようとしても (1 秒ごと、100 ミリ秒ごとなど)、5 秒ごとに新しい画像しか返されません。どこかにキャッシュされた画像があるように動作し、キャッシュを 5 秒ごとに更新するだけで、それ以外の場合は古い重複画像を返します。

問題を切り分けるために、次のことを行いました。

  • サーバー側の画像が実際に約 100 ミリ秒ごとに更新されていることを確認しました。これは、Web ページがほとんどの GET 要求に対して実際に古い画像を返していることを意味します。
  • 開発者向けオプションとシークレット モードで Web ページを実行することの両方で、ブラウザのキャッシュをオフにしました。ちなみにクロムです。
  • 構成ファイルで maxKeepAliveRequests = 1 (無効) を設定することにより、Tomcat サーバーでキープアライブをオフにしました。

それでも、実際には 5 秒ごとに新しい画像を取得しているだけです。

Example Request Headers:
  Cache-Control: no-cache
  Connection: keep-alive     <-- Could this be the problem? 
  Pragma: no-cache

Example Response Headers:
  Cache-Control: no-cache
  Cache-Control: no-store
  Connection: close
  Pragma: no-cache
  Server: Apache-Coyote/1.1

私のクエリ(画像がロードされるたびに時間遅延後に実行されます):

document.getElementById("videoDisplay").src = filename + "?random="+(new Date()).getTime();
4

4 に答える 4

2

http://tomcat.apache.org/tomcat-5.5-doc/config/context.htmlでこれを見つけました 。そこでこのエントリを読んでください..

キャッシュTTL

キャッシュ エントリの再検証間のミリ秒単位の時間。指定しない場合、デフォルト値は 5000 (5 秒) です。

これがあなたの問題の原因かもしれません

于 2013-05-20T10:17:35.753 に答える
0

2 つの提案:

  • ヘッダーを追加Expires:し、数秒前に設定します
  • POST リクエストを使用してデータを取得します。複数回フェッチされる可能性のあるものを取得することを意味します。POSTは「今回だけ」のマイデザイン
于 2013-05-18T22:46:02.847 に答える
0

私は一度似たようなことをしようとしましたが、正直なところ、画像はビデオであってはなりません。速度は 5 秒に制限されているため、サーバーを使いすぎて DDOS を実行することはありません (少なくともそれは私が考えていることですが、よくわかりません)。HTML5 タグで動画をストリーミングできます。私の良き友人である Google が私に見せてくれたこれらのサイトを、あなたは考えるかもしれません。
これはこれも
試してみてください

于 2013-05-18T22:46:08.543 に答える
0

考えてただけ:

間隔を 500 ミリ秒に設定するとします。

サーバーがリクエストに応答するのに 1 秒かかります。

したがって、最初のリクエストを待っている間、タイムアウト関数は同じオブジェクトに対して別のリクエストを発行しています。

これにより、通常、最初のリクエストが停止します。

2 つ目はまだないので、何も変わりません。

などなど。

しばらくすると、これは「同期して」フォールバックし、任意の画像が得られます。

では、サーバーの応答時間はどのくらいですか?

サーバーの速度が遅い場合、同じオブジェクトをどれだけ速く更新しても問題ありません。

完了するのを待たずにリクエストを発行するのを防ぐために、ロード中にイメージをロックしている可能性がありますか?

于 2013-05-17T20:47:13.857 に答える