我有一个java程序通过我的node.js应用程序的特定套接字向我发送数据。我希望能够获取所有数据,这些数据来自SQlite数据库,并将其发送给其他人。
我发现以下内容可以正常工作,但由于数据缺失而且有时甚至不显示,因此似乎不可靠。
stream.addListener('data', function(data){
buffer.write(data.toString());
});
在旁注上,我需要套接字保持打开状态,因此我无法调用“结束”事件。
我真的没有任何对stream.addListener的附件,所以我可以使用别的东西,如果它的工作方式我想要的。基本上我要问的是,使用node.js从套接字获取数据的最有效方法是什么?
P.S。谢谢你的时间
答案 0 :(得分: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);
}
};