我正在创建一个8位无符号的javascript数组:
var myArray = Uint8Array(64);
在客户端和服务器上操作此数组,然后通过socket.io连接发送它。我们正在编写一个游戏,因此通过网络发送的数据尽可能小。因为socket.io不支持发送二进制数据是否值得使用javascript类型数组,或者我们应该只使用普通的javascript数组?他们还会比原生的js阵列小吗?
答案 0 :(得分:6)
注意:我认为客户端是指浏览器。另外,请详细说明。
Socket.io不支持二进制数据,主要是因为它提供了不同的传输,而且很多都不支持它。
但是,原生websockets DO支持Blob和ArrayBuffers。
如果你真的想要使用二进制数据来提高效率(我同意,这是你的方法),我认为你应该考虑使用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传输,如果游戏需要低延迟,则禁用较慢的传输。