fs.writeFileSync给出错误:UNKNOWN,这是在nodejs中进行同步文件写入的正确方法

Ste*_*nko 12 javascript synchronization fs node.js

我有一个NodeJS服务器应用程序.我有这行代码用于我的日志记录:

fs.writeFileSync(__dirname + "/../../logs/download.html.xml", doc.toString());
Run Code Online (Sandbox Code Playgroud)

有时候它可以正常工作,但是在负载很重的情况下会出现这种情

Error: UNKNOWN, unknown error 'download.html.xml'
Run Code Online (Sandbox Code Playgroud)

PS:我在这里找到了一个链接:http://www.daveeddy.com/2013/03/26/synchronous-file-io-in-nodejs/ Blogger描述了writeFileSync在返回时没有真正完成写入.有没有正确的方法以同步方式进行,即没有回调?

sky*_*ack 1

对于OP似乎很欣赏这个评论,我将其放在回复中,希望它能帮助其他用户。

在我看来,问题是由于调用使用了很多描述符writeFileSync。问题中发布的链接似乎也证实了这个想法。

实际上,我仍在试图弄清楚是否存在一种方法可以知道写入何时在幕后真正完成,而不仅仅是从 Nodejs 的角度来看。也许这个参数可以提供帮助,但我猜它也遇到了同样的问题。

不管怎样,我们可以通过实现一个写入器池和一个队列来解决这个问题,在该队列上放置写入请求。

优点是可以控制打开描述符的数量。事实上,不完全是因为OP发布的链接中提到的问题,但当然可以避免耗尽系统的所有资源。

另一方面,不幸的是,存在一个问题,即该解决方案往往会占用更多内存(因为实际上是将文档停放在那里,同时等待可用的工作人员)。

当然,对于时间上分离的突发请求来说,它可能是一个合适的解决方案,但它可能不太适合时间恒定的固定负载。