通过http传输二进制数据

时间:2008-12-04 20:37:20

标签: ajax http streaming comet multipart-mixed-replace

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

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

Flash可能会完成工作,但同样,我想避免使用插件。我想有最简单的解决方案(不是我们都可以吗?),理想情况下只需要javascript / html。

我也一直在调查Comet,看看它能为我做些什么。

5 个答案:

答案 0 :(得分:4)

这很大程度上取决于您想要对数据做什么。我假设渲染它。

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

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

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

答案 1 :(得分:2)

对于数据流和套接字样式连接,您可能需要查看APE (Ajax Push Engine) project。它允许您设置JavaScript代理,JavaScript可以通过它连接以实现真正的套接字连接。

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

答案 2 :(得分:2)

我之前必须使用Video(即运动jpeg)数据做这件事。

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

multipart / x-mixed-replace目前在很多浏览器中运行良好。我认为它甚至可能在IE的更高版本中得到支持。当我不得不实现这个时,它肯定适用于大约5年前所有版本的firefox。也可能支持基于Webkit的浏览器,包括Chrome和Safari。

但是,在我看来,这实际上只适用于基于LAN的应用程序。原因是你要发送大量数据。不是在连续帧之间发送差异(如果是视频),您每次都会发送整个图像。根据用户数量的不同,这也可能给服务器带来沉重的负担。

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

对于视频,理论上你可以用javascript写一些东西来做。事实上,如果你谷歌的JavaScript视频播放器,你可以找到一些。我怀疑它们非常快,可能会给客户端机器带来沉重的负担。它仍然看起来可行。

所以你的选择是: 1)内容类型混合替换 2)下载插件 原生浏览器插件(最快最有效) 基于闪光灯或银色灯 3)基于Javascript的播放器

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

答案 3 :(得分:1)

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

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

答案 4 :(得分:1)

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

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