0
我有要使用node.js读取的日志文件(大小为1-2 MB)。感谢帮助在这个论坛上,我使用的东西,如:将JSON数据发送到从文件读取时触发的客户端
new lazy(fs.createReadStream(clientMessage.selectedFile))
.lines
.forEach(function(line){
sendData(line,client,playBackSpeed);});
的发送数据的功能本质上是一个分析器,使用开关,通过线收集从日志文件中的数据,行。以下是在送出数据功能解析器的一个片段:
switch (lineTokens[0]) //first token is the command idenitifier
{
case "$F":{ // heartbeat signal
var elapspedTimeIndex = 4, flagIndex = 5;
var heartBeat = "{\"heartBeat\": {\"elapsedTime\":"+ lineTokens[elapspedTimeIndex].trim() +", \"flag\":"+ lineTokens[flagIndex].trim() + "}}";
var now = new Date().getTime();
while(new Date().getTime() <= now + playBackSpeed) {} //sleep before we move on
client.send(heartBeat);
}
return;
}
}
我什么将数据发送定期,说1之间 - 5秒。在客户端UI中,有一种方法可以改变所需的播放速度。上面的代码工作正常,但我无法更改此文件流启动后playBackSpeed的值。我使用socket.io做消息交换,并且工作正常。看起来造成延迟的while循环阻止了客户端/服务器交换。我尝试过放入setTimeout,但是所做的只是延迟播放间隔,并一次将所有数据发送到客户端。我确信这是一个I/O阻塞问题,但我似乎可以从中发现这一点。