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阻塞問題,但我似乎可以從中發現這一點。