我创建了一个 8 位无符号 javascript 数组:
var myArray = Uint8Array(64);
在客户端和服务器上操作这个数组,然后通过 socket.io 连接发送它。我们正在编写一个游戏,因此通过网络发送的数据尽可能小。由于 socket.io 不支持发送二进制数据,是否值得为 javascript 类型的数组烦恼,还是我们应该只使用普通的 javascript 数组?它们还会比原生 js 数组小吗?
我创建了一个 8 位无符号 javascript 数组:
var myArray = Uint8Array(64);
在客户端和服务器上操作这个数组,然后通过 socket.io 连接发送它。我们正在编写一个游戏,因此通过网络发送的数据尽可能小。由于 socket.io 不支持发送二进制数据,是否值得为 javascript 类型的数组烦恼,还是我们应该只使用普通的 javascript 数组?它们还会比原生 js 数组小吗?
注意:我假设客户端是指浏览器。否则,请澄清更多细节。
Socket.io 不支持二进制数据,主要是因为它提供了不同的传输方式,而且很多都不支持。
但是,本机 websocket 确实支持 Blob 和 ArrayBuffer。
如果你真的想使用二进制数据来提高效率(我同意,这是你的情况),我认为你应该考虑使用 websockets 而不是 socket.io。
坏处:
好的:
Web 套接字 API 非常简单。
它的内存效率会更高。通常,您的普通数组是通过首先将它们制作为 JSON 字符串然后将它们发送回来来传输的。这意味着您实际上是在发送数组的字符串表示形式!相反,在这里您将发送您期望的字节数(以一种更可预测的方式,在发送之前不检查字符串长度,但如果需要,以一种更“协议”的方式)。
如果您决定使用 WS,您可以查看: http: //www.adobe.com/devnet/html5/articles/real-time-data-exchange-in-html5-with-websockets.html
否则,您可以使用 JSON。
说实话,如果您仍然使用 JSON 来支持 socket.io 和“通用”支持,那么也启用 flash 传输,如果游戏需要低延迟,则禁用较慢的传输。