繁体   English   中英

了解Node.js中的WriteStream

[英]Understanding the WriteStream in Node.js

最近,我使用Node.js和Socket.IO编写了一个小型的多房间聊天应用程序,并且根据发送消息的房间将它们记录到不同的文件中。此刻,我正在使用许多writeStreams(每个房间一个)来存档此功能,但是虽然它起作用了,但我一直在想,这是否实际上是应该使用writeStreams的方式。

我的担忧:

  1. 当我第一次实现writeStream时,这似乎是完美的匹配,而不是写整个文件,而是在发布新文件时只写消息-回顾过去,但是我不确定是否始终打开10-20个Streams是理想的选择。
  2. 当前,当最后一个用户离开房间时,我使用.end()函数,但是除了在这种情况下我无法使用的回调函数之外,似乎没有办法告诉在调用end时是否已写入所有消息(),将我带回到1。还有我是否实际上正在使用writeStreams的问题,因为它们应该被使用。

我想我的问题是...在这种情况下,可以/应该将writeStreams用于记录目的吗? 那些资源实际上是在等待输入时占用资源吗?还是节省大量时间来开放资源?

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM