5

我正在尝试使用 GET 请求从服务器检索图像。图像在不断变化,所以我想每秒抓取几次图像(目的是显示图像并最终模仿视频)。但是,GET 请求出了点问题。无论我尝试获取图像的速度有多快(每 1 秒、100 毫秒等尝试一次),它只会每 5 秒返回一个新图像。它的行为就像某处有一个缓存的图像,它只每 5 秒更新一次缓存,其他时间返回旧的、重复的图像。

我已执行以下操作以尝试隔离问题:

  • 验证服务器端的图像实际上每 100 毫秒左右更新一次,这意味着网页确实为其大部分 GET 请求返回了旧图像,
  • 通过开发人员选项和以隐身模式运行网页来关闭浏览器缓存。顺便说一下,这是 Chrome。
  • 通过在配置文件中设置 maxKeepAliveRequests = 1(禁用)来关闭 Tomcat 服务器中的 keepalive。

然而,它实际上仍然只是每 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

只是想:

假设您将间隔设置为 500 毫秒。

您的服务器需要 1 秒来响应请求。

因此,在等待第一个请求时,超时函数会在同一对象上发出另一个请求。

这通常会停止第一个请求。

第二个仍然不存在,所以什么都不会改变。

等等。

一段时间后,这将“同步”回退,您将获得任意图像。

那么,您的服务器的响应时间是多少?

如果服务器变慢,那么在同一对象上更新的速度无关紧要。

您可能在加载时对图像进行了一些锁定,以防止在不等待它们完成的情况下发出请求?

于 2013-05-17T20:47:13.857 回答
0

两个建议:

  • 添加Expires:标题,设置为几秒前
  • 使用 POST 请求获取数据。获取它意味着检索可能多次获取的内容。POST 是我的设计,意在“仅此一次”
于 2013-05-18T22:46:02.847 回答
0

我曾经尝试做类似的事情,老实说图像不应该是视频。速度限制为五秒,因此您不会过度使用服务器和 DDOS(至少我是这么认为的,但不太确定)。您可以使用 HTML5 标签流式传输视频。您可能会考虑我的好朋友 Google 向我展示的这些网站。
这是一个
也试试这个

于 2013-05-18T22:46:08.543 回答