Html 使用SSE发送图像数据

Html 使用SSE发送图像数据,html,server,server-sent-events,Html,Server,Server Sent Events,我看到的所有实现服务器发送事件()的示例都将响应的内容类型设置为text/event stream 我希望使用SSE机制发送图像数据。但我不确定这是否适用于文本内容类型 我可以用SSE吗?或者我需要一个“满标度”连接吗?您可以通过base64编码图像(SSE不支持发送二进制文件)。但是(看看你对另一个答案的评论,这些都是大图片),不要这样做。假设当前图像生成超时,因为生成速度较慢,而不是很大,我会这样做: 给你打电话/让你成为我的形象/ 这是一个SSE过程,开始制作图像。它发送通常的标题 映像准

我看到的所有实现服务器发送事件()的示例都将响应的内容类型设置为
text/event stream

我希望使用SSE机制发送图像数据。但我不确定这是否适用于文本内容类型

我可以用SSE吗?或者我需要一个“满标度”连接吗?

您可以通过base64编码图像(SSE不支持发送二进制文件)。但是(看看你对另一个答案的评论,这些都是大图片),不要这样做。假设当前图像生成超时,因为生成速度较慢,而不是很大,我会这样做:

  • 给你打电话/让你成为我的形象/
  • 这是一个SSE过程,开始制作图像。它发送通常的标题
  • 映像准备好后,将其保存到本地磁盘(或内存中的数据库等)
  • 使用SSE发回可下载图像的URL。然后关闭SSE进程(服务器端)
  • 客户机通过Apache(或其他方式)请求映像
  • 客户端可以发送一条消息,告诉用户何时获得了该图像,并且可以将其删除。和/或使用cron作业在这么多小时后清除旧图像
  • 也就是说,这有利于低延迟的文本消息:一旦制作了图像,客户端就可以下载它。这比制作图像的后台处理要好得多,然后客户端必须轮询以确定图像何时准备就绪


    如果隐私很重要-没有其他人可以下载图像-那么第5步可以是一个PHP(或您选择的语言)脚本,用于检查客户端cookie是否与您的会话匹配,并且只有在这样的情况下才能通过流式传输文件。

    对于真正大的图像,我至少会通过流式传输。然而,获取服务器端(和后端)可能很棘手

    或者,您可以平铺图像并使用简单的HTTP请求。有很多方法和图书馆,其中之一就是使用传单。 以下是一个合理的解释:

    您所需要做的就是将巨大的图像分割成块,然后您甚至可以将其放在静态服务器上。平铺必须遵循惯例
    [zoom\u level]/map\u0..NX]\u0..NY].png

    然后将坐标参考系(CRS)设置为
    L.CRS.Simple
    ,并使平铺层与图像服务器一起工作:

    L.tillelayer('/image1234/tiles/{z}/map{x}{y}.png').addTo(map)

    如果服务器上发生了重要的事情,并且浏览器客户端需要知道,那么服务器发送的事件实际上应该被用作主动通知机制。例如,在您编辑时,另一个答案已发布到SO问题。实际数据总是通过额外请求检索

    Web套接字适用于全双工TCP套接字适用的任何东西(即几乎所有东西)。但是它的级别相当低,即使对于特定的应用程序有一些开源的辅助工具。如果大型图像渲染是应用程序的焦点和卖点,那么对其进行投资可能是有意义的

    但是,快速投入生产、健壮且成本相对较低的解决方案(显示巨大图像)将是图像平铺