我在我的 socket.io 客户端上获得了很多数据,这些数据可能是也可能不是完整的数据,也可能是大数据,所以我需要让它变得高效。因此,我尝试创建缓冲区并将其解析到我的应用程序中。我知道有一些流/缓冲模块可用,如果它们实现了更高效的目标,我可能会考虑使用它们。期待看到您的答案以及关于如何最好地做到这一点的可能论点。
请注意,与客户端 Javascript 将数据呈现为浏览器友好格式的速度相比,带宽不是我关心的问题。
这是我到目前为止所得到的。
function extended_split(str, separator, max) {
var out = [],
index = 0,
next;
while (!max || out.length < max - 1 ) {
next = str.indexOf(separator, index);
if (next === -1) {
break;
}
out.push(str.substring(index, next));
index = next + separator.length;
}
out.push(str.substring(index));
return out;
};
var buffer = '';
// data format "\nOP:ARGS:DATA(could be base64 or 'other' depending on OP)\0";
socket.on('ioSend', function(data) {
data = String.fromCharCode.apply(null, new Uint16Array(data));
buffer = buffer + data;
while(buffer.indexOf('\n') != -1 && extended_split(buffer, '\n', 2)[1].indexOf('\0') != -1)
{
splitted = extended_split(extended_split(buffer, '\n', 2)[1], '\0', 2);
parse = splitted[0];
buffer = splitted[1];
parse = parse.split(':');
// Do stuff with parse here
}
});