2008-12-04 494 views
3

我正在研究流式传输二进制数据到浏览器(通过http)。我正在寻找关于如何去做这件事的好方法。最终,我将拥有一个实时数据源,并且我想操纵这些数据并在浏览器中显示它(在真实的时间)。火狐第一,IE会很好......但我并不那么挑剔。我有一个firefox插件,可以满足我的需求,但我更喜欢用javascript/html编写的东西,而不需要用户安装任何插件。通过http流式传输二进制数据

我一直在寻找multipart/x-mixed-replace MIME/media类型,它看起来像在这个项目中可能很有用,但我想听听更好的方法来做到这一点(如果有的话)之前我花了太多时间走下这条路。

Flash可能会完成这项工作,但是我想避免使用插件。我希望有最简单的解决方案(不是全部?),理想情况下只需javascript/html。

我也一直在彗星看看能为我做些什么。

回答

4

很多这取决于你想要处理的数据。我假定渲染它。

Flash可能是最简单的解决方案。这是一个普通的附加组件,几乎每个人都应该拥有它;所以你不会遇到很大的不兼容风险。

对于二进制数据处理来说,JavaScript并没有被认为是一个很好的平台 - 所以在这个领域没有太多的发展。我不认为你会为你想要的东西找到很多帮助。特别是当你获得渲染点 - 除非你可以也许将每个二进制文件转换为canvas script,因为它是关于JavaScript中唯一可用的动态图像。

IE可能实际上是个例外,因为您可能可以使用一些ActiveX对象来为几种文件类型完成此操作。但是,那么你删掉了大多数其他浏览器。

+0

是的,最终呈现数据,我用画布对象做了一些测试,看起来不错。感谢您的想法。 – 2008-12-05 00:15:01

1

您可以使用Base64将二进制文件转换为文本并发送到浏览器。有了IE,你可以直接将它转换为二进制文件,但我不确定你是否可以使用Firefox和其他软件。我确实看到了用于Base64 enflate/deflate的jscripts和一个名为base64.js的脚本,它可能也会进行转换。

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

+0

如果您转换为Base64,那么您将网络带宽增加1/3。当您可以流式传输到多个客户端时,效果不佳。 – Matt 2011-02-14 10:27:16

+0

同意。希望HTTP压缩有助于最大限度地减少带宽的增加,但也会增加额外的负载。 Q中没有太多细节,但这是纯HTML的一种选择(没有插件,当时也没有考虑HTML5)。 – Ryan 2011-02-14 19:51:43

1

我通常会避免使用multipart/x-mixed-replace,因为它有非常粗略的浏览器支持。我知道我的相机的multipart/x-mixed-replace不适用于IE或更新版本的Firefox(尽管显然有一个配置可以改变它)。

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

2

至于数据流和套接字样式的连接,你可能想看看APE (Ajax Push Engine) project。它允许你设置一个HTTP代理,你的JavaScript可以连接到真正的套接字连接。

至于如何处理数据到达时,我已经做了一个概念证明,展示了如何使用原始PNG数据,解析并将其呈现给浏览器。Check it out.

2

我有之前做这个确切的事情与视频(即动态JPEG)的数据。

我注意到你刚才说的“二进制数据” ...这是图像数据或不?它是什么?

多重/ X - 混合替换很多浏览器的这些天精品工程。我认为它甚至可能在IE的更高版本中得到支持。它肯定能在5年前的所有版本的Firefox中运行,当时我必须实现这一点。基于Webkit的浏览器可能也支持Chrome浏览器和Safari浏览器。

然而,在我看来这是真的只适用于基于LAN的应用程序。原因是你发送的数据很多。而不是发送连续帧之间的差异(如果它是视频),你会每次发送整个图像。根据用户数量的不同,这也会给服务器带来很大的负担。

因此,尽管多/ X - 混合替换是迄今为止最简单的实现,它不一定是最合适的解决方案。这又取决于你的原始数据类型。

对于视频理论上你可以使用JavaScript编写去做什么。事实上,如果你的谷歌为JavaScript视频播放器,你可以找到一些。我怀疑它们非常快,可能会给客户机带来沉重的负担。尽管如此,它确实可行。

那么你的选择是: 1)内容类型的混合取代 2)下载一个插件 原生浏览器插件(最快最有效的) Flash或Silverlight基于 3)基于JavaScript的球员

如果是你想要的视频最后一个选项,这是在最前沿的是 4)基于HTML5的视频。 http://www.html5video.org/ 由于标准仍在批准和浏览器支持有限,我不会 在这个时候推荐它。