我在NodeJS中有一个接收JSON字符串的基本TCP服务器。这些可以是一次多个字符串(由\n
分隔)或单个字符串。
当我收到由\n
分隔的多个问题时,会出现问题。
我要做的是将缓冲区数据拆分成一个数组,然后遍历该数组以避免JSON解析错误。
这是我目前的代码:
var socketServer = net.createServer(function (socket) {
// Handle incoming messages from agents.
socket.on('data', function (data) {
// Split the buffer so we dont get JSON parsing errors
// Delimiter is \n
var splitData = splitBuffer(data, "0x5c6e");
for (var i = 0; i < splitData.length; i++) {
// Error arises here since there are multiple JSONs in the string
console.log(JSON.parse(splitData[i]));
}
});
});
function splitBuffer(buf, delimiter) {
var arr = [], p = 0;
for (var i = 0, l = buf.length; i < l; i++) {
if (buf[i] !== delimiter) continue;
if (i === 0) {
p = 1;
continue; // skip if it's at the start of buffer
}
arr.push(buf.slice(p, i));
p = i + 1;
}
// add final part
if (p < l) {
arr.push(buf.slice(p, l));
}
return arr;
}
由于某种原因,splitBuffer()
函数无法根据我的分隔符拆分缓冲区。
任何想法我在这里做错了什么?
答案 0 :(得分:0)
您是否考虑过使用ascii表示法?使用javascript的String.charCodeAt(index)非常友好,它返回相应的ascii值。不完全是您正在寻找的东西,但也许这是您将来可以尝试或使用的东西。
var str = 'thing\n';
var buffer = new Buffer(str.length);
for (var i = 0; i < str.length ; i++) {
buffer[i] = str.charCodeAt(i);
if(buffer[i] !== 10) {
// 10 is \n in ascii
// do whatever
console.log(str[i] + ' ' + buffer[i])
}
}
// expected output
t 116
h 104
i 105
n 110
g 103