【问题标题】:Sharing binary buffer between Node.js server and Browser在 Node.js 服务器和浏览器之间共享二进制缓冲区
【发布时间】:2012-08-27 01:58:31
【问题描述】:

关于如何在 node.js 和包含二进制数据的浏览器之间共享缓冲区存在问题。我对Socket.io 作为传输层很满意,但问题是浏览器没有Buffer class 的移植。反正我也找不到

我也遇到过binary.js,我想知道是否有一种将socket.io 作为传输层和Binary.js 作为数据介质的好方法来组合它们。我还看到了这个question,这有点像主题,但并没有真正解决问题。

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

更新:

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

我的需求包括两件事:

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

  2. 支持二进制数据。

我可能会使用数组缓冲区。

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

【问题讨论】:

  • 我不明白到底是什么问题。您对浏览器中不存在的哪些功能感兴趣?
  • 我的需求包括两件事: 1. 在服务器和浏览器中以相同的方式处理缓冲区。 2.支持二进制数据。
  • @BenjaminGruenbaum:问题不在于浏览器中没有可用的功能,而是浏览器中可用的功能(类型化数组)在node.js 中不可用。他不想把所有的代码都写两次。
  • 嗨 @DavidSchwartz 感谢您提出这个问题。我添加了一些细节来澄清 Array Buffer 问题。
  • 不,ArrayBuffer 只会在 IE10 中出现。缓冲来自 V8 的数据结构仍然存在性能问题。这就是为什么 node.js 在 V8 之外运行缓冲模块

标签: javascript node.js socket.io


【解决方案1】:

JavaScript 的内置字符串在内部使用宽字符。所以他们可以很容易地在每个字符位置存储一个从 0 到 255 的值。这是一项 JavaScript 语言功能,因此它在浏览器或node.js 中的工作方式应该相同。

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

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

【讨论】:

    【解决方案2】:

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

    它由Uint8Array 支持,所以browser support 是粗略的。

    【讨论】:

    • 这就是我正在寻找的答案,问题是,它仍然非常不稳定。
    • 是的,项目中的活动很少;看起来这是某人的实验代码。我会用它作为一个很好的起点——你将不得不分叉和改进代码。
    • 这些天来这里生活:github.com/feross/buffer
    猜你喜欢
    • 2016-11-03
    • 2011-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-07
    • 2021-12-31
    • 2011-08-22
    • 1970-01-01
    相关资源
    最近更新 更多