gpt4 book ai didi

node.js - 如何使用 NodeJS Stream 两次?

转载 作者:太空宇宙 更新时间:2023-11-03 21:57:53 27 4
gpt4 key购买 nike

我有一个可读的 NodeJS Stream,我想使用它两次。免责声明:我对流不太满意

为什么?

我的服务允许为用户上传图像。我想避免上传相同的图像。

我的工作流程如下:

upload image per ajax
get hash of image
if hash in database
return url from database
else
pass hash to resize&optimize pipeline
upload image to s3 bucket
get hash of image and write it to database with url
return s3 url

我通过 hashstream 获取流的哈希值并使用 gm 优化我的图像.

Hashstream 获取一个流,关闭它,创建一个哈希并通过回调返回它。

我的问题是:结合这两种方法的最佳方法是什么?

最佳答案

有两种方法可以解决:

  • 缓冲流

    由于您不知道您的流是否会再次使用,因此您可以简单地以某种方式缓冲它(以某种方式意味着处理数据事件,或使用某些模块,用于示例 accum )。一旦您知道哈希函数的结果是什么,您只需将整个累积缓冲区写入 gm 流即可。

  • 使用stream.pipe两次来“发球”

    您可能知道 posix 命令 tee,同样您可以将所有数据推送到两个地方。这是一个例子implementation of a tee method在我的“超燃冲压发动机”流中,但我想对你来说,简单地管道两次就足够了。然后,一旦计算出哈希值并遇到第一个条件,我就会简单地发送结束消息。

正确的选择取决于您是否想节省内存或 CPU。对于更少的内存,请使用两个管道(您的优化过程将启动,但您将在它输出任何内容之前取消它)。为了减少 CPU 和进程的使用,我会选择缓冲。

总而言之,只有当您可以轻松地扩展到更多传入图像,或者您确切知道有多少负载并且可以处理它时,我才会考虑缓冲。无论哪种方式都会有限制,并且需要以某种方式处理这些限制,如果您可以启动更多实例,那么您应该更好地使用更多 CPU 并将内存保持在合理的水平。

关于node.js - 如何使用 NodeJS Stream 两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35545026/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com