node.js - Node 上的标准输出冲突

标签 node.js stream stdout webstorm winston

如果多个进程同时写入标准输出,则没有什么可以阻止流交错。这就是我所说的碰撞。 enter image description here 根据node source中的评论,应该可以避免 process.stdout 中的冲突。我尝试过这个,它有帮助,但我仍然遇到碰撞。如果没有 writing 标志,我每次都会发生冲突,使用标志时它会下降到大约 40%。仍然非常重要。

page.on('onConsoleMessage', function log(message) {
  var writing = process.stdout._writableState.writing
    || process.stdout._writableState.bufferProcessing
    || process.stdout.bufferSize ;
  if(writing)
    process.nextTick(message => log(message));
  else
    process.stdout.write('-> ' + message + '\n')
});

避免 process.stdout 发生冲突的最佳方法是什么?

上面的例程正在与 Winston 竞争对于标准输出

Node v5.12.0 Windows 10

此问题仅在使用 webstorm 中的运行控制台时发生,在 powershell 或 cmd 中运行 Node 时输出不会混淆。我提出了ticket为此,jetbrains 提供了此服务。

最佳答案

如果您有多个写入者到同一个流,我认为您不会出现交错。即使单个写入器连续记录多行,这些行也将以正确的顺序进行缓冲(如果正在缓冲),并且当另一个写入器记录其行时,它们将被附加到缓冲区,位于先前记录的行后面。

当写入者写入不同的流时,可能会发生交错,例如一个写入到 stdout,另一个写入到 stderr。在某一时刻,当一个流的输出缓冲区填满时,它会刷新到控制台,而不管是否有任何其他流也可能写入控制台。

关于node.js - Node 上的标准输出冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39512022/

相关文章:

java.io.IOException : mark/reset not supported Java Audio Input Stream/Buffered Input Stream 异常

windows - 如何在 perl 中为反引号加载 STDIN(不写入临时文件)

python - 标准输出的行缓冲在 MINGW/MSYS Python 2.7.3 上失败

winapi - 我可以单独捕获 stdout/stderr 并保持原始顺序吗?

node.js - google api 的刷新 token 在 nodejs 中无法正常工作

javascript - 如何在我的测试中断言 Chai 断言将失败(错误与断言错误)

c# - Composite Stream Wrapper 提供部分 MemoryStream 和完整的原始 Stream

node.js - 网页呈现,但第一次使服务器崩溃,然后再呈现而不使服务器崩溃

node.js - Google Cloud Datastore 如何在本地运行?

c++ - 自定义流到 C++ 中的方法?