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

18

如何在node.js和浏览器之间分享包含二进制数据的缓冲区存在问题。我对Socket.io作为传输层感到非常满意,但问题是浏览器没有Buffer类的迁移。至少我找不到。

我也了解到binary.js,并且想知道是否有一个好的方法将它们结合起来,让socket.io作为传输层,Binary.js作为数据介质。我还看到了这个问题,它与主题有关,但并未真正解决问题。

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

更新:

似乎binary.js不是解决方案。我的基本要求是在node和浏览器中共享Buffer的相同功能。

我的需求包括两件事:

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

  2. 支持二进制数据。

我可能会使用Array Buffer。

编辑: 由于node.js在V8上运行,您可以使用ArrayBuffer。看起来问题已经解决了。不过,据我所知,node的人们决定创建一个缓冲区模块,并在他们创建的C绑定中对其进行管理(来自Ryan Dahl的演讲)。我认为这与网络缓冲有关。这意味着ArrayBuffer仍然不是在服务器和浏览器之间共享的好数据介质。


1
我不明白问题的具体所在。您到底需要浏览器中不存在的哪些功能? - Benjamin Gruenbaum
我的需求包括两个方面:
  1. 在服务器和浏览器中以相同的方式处理缓冲区。
  2. 支持二进制数据。
- qballer
1
@BenjaminGruenbaum:问题不在于浏览器中没有可用的功能,而是浏览器中可用的功能(如类型化数组)在node.js中不可用。他不想要把所有代码都写两遍。 - David Schwartz
嗨@DavidSchwartz,感谢您提升这个问题的关注度。我已经添加了一些细节来澄清Array Buffer问题。 - qballer
1
不,ArrayBuffer 只能在 IE10 中使用。从 V8 缓冲数据结构仍存在性能问题。这就是为什么 node.js 将缓冲模块运行在 V8 之外的原因。 - qballer
显示剩余2条评论
2个回答

8

这就是我想要的答案,问题是它仍然非常不稳定。 - qballer
是的,这个项目的活动非常少;看起来它只是某人的实验性代码。我会把它作为一个很好的起点——你需要分叉并改进代码。 - josh3736
2
这些天它在这里:https://github.com/feross/buffer - Arto Bendiken

2
JavaScript内置的字符串使用宽字符。因此,每个字符位置可以轻松存储0到255之间的值。这是JavaScript语言的特性,因此在浏览器或node.js中应该能正常工作。
您可以使用charCodeAt提取字符串中特定位置的值,并使用fromCharCode创建一个值为0到255的字符(可添加到字符串中)。
您可以使用各种字符串函数来操作此形式的数据。您可以像这样使用JavaScript字符串常量创建常量:"\x00\x12\x34\x56"

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