在Node.js服务器和浏览器之间共享二进制缓冲区

时间:2012-09-01 15:34:12

标签: javascript node.js socket.io

如何在node.js和包含二进制数据的浏览器之间共享缓冲区存在问题。我很高兴Socket.io作为传输层,但问题是浏览器没有移植Buffer class。不是我能找到的东西

我也遇到了binary.js,我想知道是否有一种很好的方法可以将socket.io作为传输层并将Binary.js作为数据媒体进行组合。我也看到了这个question,这是一个主题,但并没有真正解决问题。

我知道socket.io添加了二进制支持,但我没有找到关于该主题的任何文档。

更新

似乎binary.js不是解决方案。我想要的基本要求是与浏览器共享Buffer在节点中具有的相同功能。

我的需求包括两件事:

  1. 在服务器和浏览器中以相同的方式处理缓冲区。

  2. 支持二进制数据。

  3. 我可能会使用Array Buffer。

    编辑: 由于node.js在V8上运行,因此您可以使用ArrayBuffer。似乎问题已经解决了。然而,据我所知,节点人员认为创建一个缓冲模块并在他们创建的C绑定中管理它是一个好主意(来自Ryan Dahl的讲话)。我认为这与如何通过网络进行缓冲有关。这意味着ArrayBuffer仍然不是在服务器和浏览器之间共享的良好数据媒体。

2 个答案:

答案 0 :(得分:8)

browser-buffer在浏览器中模拟Node的Buffer API。

它由Uint8Array支持,因此browser support是粗略的。

答案 1 :(得分:2)

JavaScript内置的字符串在内部使用宽字符。因此,他们可以轻松地在每个角色位置存储0到255之间的值。这是一种JavaScript语言功能,因此它应该在浏览器或node.js中使用相同的功能。

您可以使用charCodeAt提取字符串中特定位置的值,并使用fromCharCode创建一个字符(可以添加到字符串中),其值为0到255. / p>

您可以使用各种字符串函数来处理此表单中的数据。您可以使用JavaScript字符串常量创建常量,例如"\x00\x12\x34\x56"