【问题标题】:Send data in chunks with nodejs使用 nodejs 分块发送数据
【发布时间】:2017-08-23 20:57:01
【问题描述】:

我对 nodejs 很陌生,我正在为 Angular 4 应用程序开发后端。问题是后端为响应生成整个数据的速度很慢,我想在数据可用时尽快发送数据。我正在阅读 RxJS,但我真的不知道如何在 node 中使用它,你能帮帮我吗?

【问题讨论】:

  • res.write() 将发送一条响应。您可以根据需要多次调用它,然后在完成后调用res.end()
  • @jfriend00 他真正需要的是尽快交付它们,所以res.write(chunk) 跟随res.flush() 在块可用时立即交付块,结束时,然后@987654326 @ 被执行。
  • 我现在正在使用 socket.io,它工作得很好!
  • 另一个超级nodejs websocket库是wsnpmjs.com/package/ws

标签: javascript node.js express streaming


【解决方案1】:

也许您正在寻找一种方法来流式传输数据

快递

一般回复res.send(data),只能调用一次。

如果您正在读取和发送一个大文件,您可以在使用res.write(chunk) 读取文件数据时流式传输文件数据,并在文件读取的“结束”事件中调用res.end()结束响应。


编辑:正如您所说,您想要的是在块可用时立即流式传输,因此您可以在写入之间使用res.flush() 命令(在res.write(chunk) 之后刷新)。

在您的情况下会快得多,但整体压缩效率会低得多。

【讨论】:

  • 是的,但是通过这种方式,我仍然只有在调用 end 方法时才接收数据(一次全部)
  • 它仍然会比 res.send(data) 快得多
  • 在我的情况下,一些数据在半秒后可用,一些数据在 5 秒后可用。使用这种方法我仍然在 5 秒后得到所有数据,这不是我需要的
  • 如果要流式传输,可以在写入之间使用 res.flush() 命令,但是压缩效率会低很多。
  • @lpeppe 您是否尝试过 res.flush() (正如我对答案的最后编辑提到的那样)?
猜你喜欢
  • 2023-01-27
  • 2013-01-24
  • 1970-01-01
  • 1970-01-01
  • 2016-09-06
  • 2015-04-26
  • 2014-09-30
  • 2019-05-04
  • 1970-01-01
相关资源
最近更新 更多