我在 Javascript 游戏中使用类型化数组在客户端(在浏览器中运行)和服务器(运行 node.js)之间发送数据。我可以来回发送消息没有问题,但我有兴趣重用我的类型化数组,而不是每次发送消息时都创建一个新数组。
这是我的 sendMessage 代码:
function sendMessage(socket, data) {
// data is JSON
var encoded = BISON.encode(data);
if (socket.isBinary) {
var len = encoded.length,
bytes = new Uint32Array(len);
for (var i = 0; i < len; ++i) {
bytes[i] = encoded.charCodeAt(i);
}
}
if (server && socket.isBinary) {
socket.send(bytes, { binary: true, mask: false });
} else {
socket.send(encoded);
}
}
这是我的 readMessage 代码:
function readMessage(data) {
if (data instanceof ArrayBuffer) {
var bytes = new Uint32Array(data);
data = String.fromCharCode.apply(null, bytes);
}
var message = JSON.stringify(BISON.decode(data));
return JSON.parse(message);
}
每次发送消息时,我都会创建一个新的 Uint32Array,将其初始化为我打算发送的消息的长度。而不是每次我想为每条消息重用这个数组时都创建一个新数组。
我目前对此的想法是确定我maxMessageSize
的并用这个长度初始化数组。maxMessageSize
将是可以通过套接字发送的最大允许消息。
问题
大多数消息的大小不太可能完全一致 maxMessageSize
。在这些情况下,我需要用一些值(null
?)填充消息的长度。在读取套接字另一端的值时,我怎么知道这个填充是什么时候开始的?
在写出所有这些内容时,我想到了另一个问题:这值得付出努力吗?