1

我有一个 java 程序通过特定的套接字向我的 node.js 应用程序发送数据。我希望能够获取所有数据,即来自 SQlite 数据库的信息,并将其发送到其他地方。

我发现类似下面的东西可以工作,但它似乎不可靠,因为数据丢失,有时甚至不显示。

stream.addListener('data', function(data){
buffer.write(data.toString());
});

在旁注中,我需要套接字保持打开状态,所以我不能调用“结束”事件。

我真的对 stream.addListener 没有任何附件,所以如果它按我想要的方式工作,我可以使用其他东西。基本上我要问的是,使用 node.js 从套接字获取数据的最有效方法是什么?

PS谢谢你的时间

4

1 回答 1

0

data事件不能保证一次性将所有数据发送给它。您需要在多个事件上建立一个缓冲区并注意某种分隔符(换行符、空字符,无论您感觉如何)。这是一个项目的示例,我从 IRC 解析数据(从 CoffeeScript 转换);parseData是事件的事件处理程序data(例如socket.on('data', this.parseData);):

IrcConnection.prototype.parseData = function(data) {
  var line, lines, i;

  data = data.replace("\r\n", "\n");
  this.buffer += data;
  lines = this.buffer.split("\n");
  this.buffer = "";

  /* Put the last line back in the buffer if it was incomplete */
  if (lines[lines.length - 1] !== '') {
    this.buffer = lines[lines.length - 1];
  }

  /* Remove the final \n or incomplete line from the array */
  lines = lines.splice(0, lines.length - 1);
  for (i = 0; i < lines.length; i++) {
    line = lines[i];
    this.emit('raw', line);
  }
};
于 2012-06-21T19:58:22.017 回答