node.js用于大数据的tcp线路接收器实现



我正在尝试编写一个新的行分隔TCP客户端,该客户端应该能够接收大尺寸数据。要接收的输入数据的特征是,

数据以新行分隔。数据也不断地来自某些服务器。有时数据是由多个新行分隔的小尺寸和大尺寸数据作为突发。但它们是很好的新线分离。

我正在尝试为它编写一个node.js程序。但它不起作用。我试过。。

var net = require('net');
var client = new net.Socket();
client.connect(1337, '127.0.0.1', function() {
    console.log('Connected');
    client.write('Hello, server! Love, Client.');
});
client.on('data', function(data) {
    console.log('Received: ' + data);
});
client.on('close', function() {
    console.log('Connection closed');
});

我希望加强上述计划。

有时它转储不完整的数据,有时同时转储多个新行分隔的数据。

不能保证您将在"data"事件处理程序中接收到多少数据(除非至少有1个字节)。您必须自己缓冲数据,手动搜索换行符,并在适当的地方进行剪切。类似这样的东西:

var buffer = '';
client.on('data', function(data) {
  var prev = 0, next;
  data = data.toString('utf8'); // assuming utf8 data...
  while ((next = data.indexOf('n', prev)) > -1) {
    buffer += data.substring(prev, next);
    // do something with `buffer` here ...
    console.log('got whole message: ' + buffer);
    buffer = '';
    prev = next + 1;
  }
  buffer += data.substring(prev);
});

由于net.Socket是可读流,因此可以使用event-stream模块。它包含.split()函数,确保每一行都是一个块:

client.pipe(es.split())
.pipe(es.map(function (data, cb) {
    console.log('Got the following message:', data);
    cb(null)
});

最新更新