我正在通过一个Java程序通过Node.js应用程序的特定套接字向我发送数据。我希望能够获取所有数据(即来自SQlite数据库的信息)并将其发送给其他对象。

我发现类似以下内容的方法可以工作,但由于数据丢失有时甚至不显示,因此似乎不可靠。

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


附带一提,我需要使套接字保持打开状态,以便无法调用“结束”事件。

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

附言感谢您的时间

最佳答案

不能保证data事件一口气将所有数据发送给它。您需要在多个事件上建立一个缓冲区,并注意某种分隔符(换行符,空字符,无论您感觉如何)。这是一个项目示例,其中我从IRC解析数据(从CoffeeScript转换而来); parseDatadata事件的事件处理程序(例如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);
  }
};

关于sockets - 在node.js中接收数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11144769/

10-12 16:24
查看更多