Javascript 类型数组 "over the wire"

标签 javascript html node.js socket.io

我正在创建一个 8 位无符号 javascript 数组:

 var myArray = Uint8Array(64);

在客户端和服务器上操作这个数组,然后通过 socket.io 连接发送它。我们正在编写一个游戏,因此通过网络发送的数据尽可能小。由于 socket.io 不支持发送二进制数据,是否值得使用 javascript 类型的数组,或者我们应该只使用普通的 javascript 数组?它们还会比原生 js 数组小吗?

最佳答案

注意:我假设您所说的客户端是指浏览器。否则,请提供更多详细信息。

Socket.io 不支持二进制数据,主要是因为它提供了不同的传输方式,其中很多都不支持。

但是,原生 websockets 确实支持 Blob 和 ArrayBuffers。

如果您真的想使用二进制数据来提高效率(我同意,这就是您的情况),我认为您应该考虑使用 websockets 而不是 socket.io。

缺点:

  • 只有约 55% 的用户使用支持 websockets 的浏览器浏览网页。
  • 您不会拥有 socket.io 提供的商品,例如 channel 、emit 和 on 方法。

优点:

  • Web 套接字 API 非常简单。

  • 内存效率会更高。通常,您的普通数组通过首先将它们制作成 JSON 字符串然后将它们发回来传输。这意味着您实际上是在发送数组的字符串表示形式!相反,您将在此处发送您期望的字节数(以更可预测的方式,在发送前不检查字符串长度,但如果需要,以更“协议(protocol)”的方式)。

如果您决定使用 WS,您可以查看:http://www.adobe.com/devnet/html5/articles/real-time-data-exchange-in-html5-with-websockets.html

否则你可以只使用 JSON。

说实话,如果您仍然使用 JSON 来支持 socket.io 和“通用”支持,那么也启用闪存传输,如果游戏需要低延迟,则禁用较慢的传输。

关于Javascript 类型数组 "over the wire",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12718970/

相关文章:

javascript - 如何根据类似的类获取容器内元素的索引?

php - 限制要获取的 RSS 提要数量

php - 在 php 中输出多行不起作用

node.js - NodeJS 上的 Aurelia 捆绑和生产部署

javascript - Angular 1 中的 Angular 2 组件?

javascript - 范围包含值,但访问它时,它是未定义的

php - 使用memcached存储session数据,安全吗?

javascript - 无法理解 react 依赖中的问题

javascript - 为什么我的表格没有部分呈现?

javascript - 如何编辑 JS 填充的输入?