节点JS通过分隔符拆分缓冲区

时间:2014-01-28 10:27:13

标签: json node.js

我在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()函数无法根据我的分隔符拆分缓冲区。

任何想法我在这里做错了什么?

1 个答案:

答案 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