1

在我的服务器端,我使用可写流来记录连接到服务器的所有客户端的变化数据。这是我写的:

function updateLoop () {
    var data = {'timeStep': timeStep, 'playerInfo': playerInfo};
    var text = JSON.stringify(data);
    writeStram.write(text + '\n');
    timeStep += 1;
}
...
updateTimer = setInterval(updateLoop, 50);

所以函数 updateLoop() 每 50ms 被调用一次。

当'playerInfo'很小(小于1KB)时有效,例如服务器端运行20s后,输出文件中有20*1000/50 = 400行数据

但是当'playerInfo'变大,比如6KB或更大时,服务器端运行20s后,输出文件中只有220行数据。playerInfo 越大,输出文件中成功记录的数据行数越少。

我想知道 write() 方法的调用率是否有限制

非常感谢你们的帮助!

4

1 回答 1

3

问题可能不在于. write,而在于 JavaScript 中的计时器setInterval以及计时器的工作方式。

对于较大的数据,updateLoop完成执行所需的时间可能比设置的 50 ms 延迟要长。如果间隔需要足够长的时间相互重叠,其中一个将被添加到事件队列中,而另一个已经在等待,则跳过(或“丢弃”)较新的间隔。

node.js中可写流的write()方法能调用多快?

write不应显式限制性能,但它可能会受到 Node 可以在您的计算机上实现的整体性能的限制(受 CPU、RAM 等影响)。

您必须对updateLoop不同数量的playerInfo. 您可以为此使用一些软件包ben,包括:

ben(1000, updateLoop, function (ms) {
    console.log(ms, 'milliseconds per iteration');
});
于 2012-09-21T02:37:26.853 回答