通过HTTP传输二进制流数据

3
我正在研究如何通过http将二进制数据流式传输到浏览器。我想知道有哪些好的方法可以实现这一目标。最终我会有一个实时数据源,我想操作此数据并在浏览器中显示它(尽可能地实时)。首先考虑Firefox,IE也可以,但我不是那么挑剔。我有一个Firefox插件可以满足我的需求,但我更喜欢用javascript/html编写的东西,这样用户就不需要安装任何插件。
我一直在研究multipart/x-mixed-replace MIME/media类型,看起来它可能对这个项目有用,但在我花费太多时间之前,我想听听更好的方法(如果有的话)。
Flash可能可以完成工作,但再次强调,我想避免使用插件。我希望拥有尽可能简单的解决方案(我们都是这样想吧?),最好只用javascript/html。
我还研究了Comet,看看它能为我做什么。
5个回答

4
很大程度上取决于您想如何处理数据。我假设您要呈现它。
Flash可能是最简单的解决方案。它是一个足够常见的插件,几乎每个人都应该有它了;因此,您不会遇到太多不兼容的问题。
JavaScript并没有被认为是二进制数据处理的良好平台,因此在这个领域没有太多的发展。我认为您不会找到太多帮助来实现您想要的功能。特别是当您达到渲染的点时 - 除非您可以将每个二进制文件可能转换为画布脚本,因为这是JavaScript中唯一可用的动态成像方式。
IE实际上可能是例外,因为您可以使用一些ActiveX对象来完成一些文件类型的操作。但是,这样就排除了大多数其他浏览器。

是的,最终要渲染数据,我已经使用画布对象进行了一些测试,看起来还不错。谢谢你的想法。 - Jeffrey Martinez

2

我以前曾经处理过视频(即动态jpeg)数据。

我注意到你刚才说的是“二进制数据”……这是图像数据还是其他数据?

multipart/x-mixed-replace在现今很多浏览器中运行良好。我认为甚至在IE的后续版本中也支持。它在大约5年前的所有firefox版本中肯定可以使用,Webkit内核的浏览器也可能支持,包括Chrome和safari。

然而,依我看,这只适用于基于LAN的应用程序。原因是你正在发送大量数据。你将每次发送整个图像,而不是发送连续帧之间的差异(如果是视频)。这取决于用户数量,这也可能对服务器的带宽造成沉重负担。

因此,虽然multipart/x-mixed-replace是迄今为止最简单的实现方式,但不一定是最合适的解决方案。再次强调,这取决于您的原始数据类型。

对于视频,理论上您可以编写JavaScript代码来处理。事实上,如果您搜索JavaScript视频播放器,您可以找到一些。我怀疑它们并不特别快,并且可能会给客户端机器带来沉重负担。不过,似乎确实可以做到。

因此,您的选择是: 1)内容类型为mixed-replace 2)下载插件 本机浏览器插件(最快,最有效) 基于Flash或silverlight的 3)基于JavaScript的播放器

如果您想要视频,则最后一个选项就是处于前沿的 4)基于HTML5的视频。http://www.html5video.org/ 由于标准仍在制定中,而且浏览器支持有限,我不建议现在使用它。


2
关于数据流和套接字风格的连接,您可能想看看APE(Ajax Push Engine)项目。它允许您设置一个HTTP代理,使您的JavaScript可以通过真正的套接字连接进行连接。
至于当数据到达时要做什么,我已经完成了一个概念验证,展示了如何使用原始PNG数据,解析它并将其呈现到浏览器中。查看一下。

1

您可以使用Base64将二进制转换为文本并将其发送到浏览器。在IE中,您可以直接将其转换为二进制,但我不确定Firefox和其他浏览器是否可以这样做。我看到了一些用于Base64压缩/解压的jscripts以及一个名为base64.js的脚本,该脚本可能也进行了转换。

然而,您最好将二进制数据转换为JSON,并使用AJAX传输数据,然后在浏览器中将其处理为javascript对象。Web服务器将负责获取数据并将其转换为JSON,因此无论您使用哪种编程语言,都应该能够处理二进制数据。


如果你转换为Base64,那么网络带宽会增加1/3。当你可以流式传输到多个客户端时,这并不好。 - hookenz
同意。希望HTTP压缩能够帮助最小化带宽增加,但这也会增加额外的负载。在Q中没有太多细节,但这是纯HTML(没有插件,也不考虑HTML5)的一个选项。 - Ryan

1

通常我会避免使用multipart/x-mixed-replace,因为它的浏览器支持相当不稳定。我知道我的相机的multipart/x-mixed-replace在IE或新版本的Firefox上无法工作(尽管显然有一种配置可以改变这种情况)。

我认为一个小型的Flash应用程序可能是你最好的选择之一。


2
我已经能够在Firefox 3.0.4中使用multipart/x-mixed-replace获取基本示例,而不需要更改任何设置(据我所记)。你遇到了什么问题? - Jeffrey Martinez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接