如何将二进制消息传递给 JavaScript Web Worker 或从 JavaScript Web Worker 传递二进制消息?

Ahi*_*una 2 javascript serialization multithreading

我正在构建一个多线程客户端 JavaScript 应用程序,我希望有一个后台线程提取二进制数据并将其传递给主线程。我知道这可以通过序列化在其他语言中完成,但是如何在 javascript 中完成此操作?


我可能会将此应用程序转变为独立的 XULrunner 应用程序,以提高效率,因此我宁愿采用 HTML5“网络工作人员”路线,而不是使用 Gears。

Kev*_*son 5

Web Workers postMessage API 采用 JavaScript 对象。Mozilla使用网络工作者文档说:

您可以使用 postMessage() 方法安全地将对象传入和传出工作线程;对象会在内部自动转换为 JSON。

因此,您可以使用任何支持或可以转换为二进制数据的 JavaScript 对象。根据其他因素,可能会转换为 Base64 字符串(请参阅如何使用 Javascript 编码为 Base64?)或对数字使用数组。

  • 感谢你的回答!我会投票赞成这个答案,但还没有这样做的声誉。我的印象是只允许字符串,因为它被记录为“消息传递”,但从你的解释来看,它似乎可以处理更多。另外,感谢您的链接。 (2认同)
  • 实际上,我对这个主题做了更多研究,看来 Firefox 的 JSON 编码似乎可以在 3.6+ 上工作。即使在已发布的 Firefox 3.5 版本中也没有。我曾想过遵循使用 window.atob() 的另一种方法,但此方法在网络工作人员本身中不可用,因为他们无法访问 DOM。我可以让我的应用程序在 3.6+ 版本的 Firefox 中运行,但这对我来说没有多大作用,因为今天只发布了 3.5 :( (2认同)