0

用例是在 HTML 文档中引用图像 URL(例如 <img src=...>),该 URL 将由浏览器或电子邮件客户端查看,并让图像反映服务器确定的当前状态。图像将由后端(例如servlet)以固定的时间间隔(例如每分钟)动态计算和创建。它有点像视频源,但帧速率很差(每分钟一帧)。;)

我想这里至少必须满足两个关键假设:

  1. 生成图像的后端必须能够发送图像的初始版本,然后是图像的后续版本,例如在计算-发送-睡眠循环中,而客户端无需关闭连接。后端将保持与客户端的 HTTP 连接打开并继续发送新版本,直到客户端关闭连接,例如因为它不再显示文档。

  2. 获取图像的客户端将检测到后端不断发送图像的新版本并重新绘制它。我不确定服务器是否可以明确地向客户端发出信号,例如设置一个保持活动的响应标头或其他东西 - 或者甚至不需要服务器将保持连接打开。

这些假设合理吗?对于后端,我将使用 servlet 作为概念证明,而前端将是 Firefox 之类的浏览器和 Thunderbird 之类的电子邮件客户端。

我不太确定服务器将如何向客户端发出先前的图像已过时并且可以丢弃并且应该接收并重新绘制新图像的信号,但也许这只是刷新和重新发送新数据的问题?对此的任何指示也将不胜感激。

使用动画 gif 之类的东西是行不通的,因为我无法提前知道图像是什么。换句话说,我无法预先计算图像序列并发送一次。

4

2 回答 2

0

服务器是否必须将图像发送到浏览器而不是浏览器轮询图像?

通常客户端会轮询服务器以获取更新,因为它降低了服务器上的负载。也许你可以这样设计。

我自己从未尝试过,但是使用node.js,您应该能够创建一个套接字,然后服务器可以将图像发送到该套接字。不知道这有多容易。

轮询服务器将是最简单的选择

于 2013-07-03T03:18:24.873 回答
0

在进行了一些挖掘之后,我偶然发现了混合替换内容类型,请参阅https://en.wikipedia.org/wiki/MIME#Mixed-Replace。请注意,根据 Wikipedia 条目,对此的支持似乎不是 100%——我没有 Internet Explorer 或 Outlook,所以我无法测试,但它适用于当前版本的 Chrome、Firefox 和雷鸟。

脚步:

  1. 向客户端发送“Content-type: multipart/x-mixed-replace;boundary=<SOME_BOUNDARY_STRING>”。

  2. 对于发送的每个图像,请执行以下操作:

    a) 发送“内容类型:<MIME_TYPE>”,例如“image/png”。

    b) 将图像作为原始字节发送。

    c) 发送边界,如“--<SOME_BOUNDARY_STRING>”——注意双连字符。

    d) 冲洗。

  3. 等待任何间隔并重复。连接将由客户端关闭,或者服务器可以关闭它。

是的,这在服务器上相当繁重。如果您需要为网页的多个 URL 获取图像,最好轮询而不是流。但是,就我而言,主要好处是避免电子邮件中的图像过时,并且用例需要单个图像,这在服务器上的负担要轻得多。您可以向 URL 添加参数以控制此行为。

于 2013-07-03T16:58:09.090 回答