2012-06-21 35 views
1

我有一个java程序通过一个特定的套接字将数据发送给我的node.js应用程序。我希望能够从SQlite数据库获取所有数据,并将数据发送给其他人。在node.js中接收数据

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

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

在一个侧面说明,我需要插座保持开放,所以我不能称之为“结束”事件。

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

P.S.谢谢你的时间

回答

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); 
    } 
}; 
+0

我想是这样的,它工作在一定程度上,通过我喜欢你的代码比我更好的方式,但我有一些丢失的数据。我认为问题在于node.js说“如果可读流发出'数据'事件时没有监听器,数据将会丢失。”我会尝试一下你的代码实现,看看它是否修复它。谢谢回复。 –

+0

该问题的一个解决方案是确保在连接套接字之前附加“data”事件侦听器。 –

+0

真的很愚蠢的问题,但在你的程序中是什么IrcConnection? –