理解Node.js中的WriteStream

时间:2015-03-16 16:43:19

标签: node.js logging

最近我使用Node.js和Socket.IO编写了一个小型多房间聊天应用程序,并根据发生的房间将发送的消息记录到不同的文件中。目前我正在使用多个writeStream(一个用于每个房间)存档这个功能,但是当它工作时,我一直想知道这是否真的是如何使用writeStreams。

我的担忧:

  1. 当我第一次实现writeStream时,它似乎是完美的匹配,而不是编写整个文件,它只是在发布新消息时写入消息 - 在回顾中但是我不确定是否一直打开10-20个Streams是理想的。
  2. 目前我在最后一个用户离开房间时使用.end()函数,但除了我在这种情况下无法使用的回调函数之外,似乎无法确定是否已经编写了所有消息当调用end()时,它会让我回到1.以及我是否实际使用writeStreams时的问题,因为它们是要使用的。
  3. 我想我的问题是......在这种情况下,可以/应该将writeStream用于记录目的吗?这些是在等待输入时实际占用资源还是保存为长时间打开大量数据?

1 个答案:

答案 0 :(得分:0)

关于第2点,我可以很快:当你在writeStream上调用.end()时,流不再接受新的写入,但会完成将它拥有的数据写入文件系统。因此,您不必担心丢失部分聊天记录 - 除非当然发生错误(为此,请收听流的'错误'事件)。

关于第1点:我认为保持文件系统流打开更长时间没有任何问题。例如,许多应用程序都会这样做来编写日志。我在您的设置中看到的一个可能的问题是,随着聊天系统处理的数据量的增长,您可以更快地生成聊天记录,然后将其写入文件系统。如果发生这种情况,您的流将开始缓冲越来越多的数据,最终您的进程将耗尽内存并崩溃。当然这取决于您的数据量。