【发布时间】:2014-01-28 10:27:12
【问题描述】:
我在 NodeJS 中有一个基本的 TCP 服务器,它接收 JSON 字符串。一次可以是多个字符串(由\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() 函数无法根据我的分隔符拆分缓冲区。
有什么想法我在这里做错了吗?
【问题讨论】:
-
如果我正确理解你想要做什么,为什么不变成一个字符串而不是原始字节,并使用
.split("\n")字符串方法我想你会得到你想要的结果。跨度> -
这种方法可能不起作用,因为缓冲区可能太大(
Error: Cannot create a string longer than 0x1fffffe8 characters)。这就是为什么我在谷歌上搜索了与提问者相同的问题。