gpt4 book ai didi

node.js - Node 的异步 GraphicsMagick

转载 作者:搜寻专家 更新时间:2023-11-01 00:11:15 24 4
gpt4 key购买 nike

我正在使用 GraphicsMagick对于 Node 。我基本上裁剪照片并检索用户上传的照片的 exif 数据。我不想阻塞等待这些任务完成的请求流,因此我需要使用异步函数才能做到这一点。而且我认为我应该能够做到,因为这些是 node.js 使自己异步的 I/O 操作。

但正如我所见,GraphicsMagick 中用于 Node 的所有函数都是同步函数。所以我无法确定如何实现我正在寻找的东西。

我想到的一个想法是编写一个带有回调的函数,并在其中完成 GraphicsMagick 处理。并使用.nextTick() 函数实现异步流程。但我不确定这是否合适。还有 GraphicsMagick 的异步函数。

请帮助我,关于如何从 graphicsmagick 获取异步函数的示例代码将不胜感激。

最佳答案

更新:
@Saransh Mohapatra 的实际答案实际上是错误的。经过少量调查后发现,所有对图像执行操作的方法实际上不执行任何操作,而只是将参数附加到列表中,当您 write 或调用在中执行的任何缓冲区相关方法时将使用这些参数为了获取/写入实际图像缓冲区。

这里是 blur 示例中的详细信息:

  1. 我们调用blur:https://github.com/aheckmann/gm/blob/master/lib/args.js#L780
  2. 它调用 this.out 将调用:https://github.com/aheckmann/gm/blob/master/lib/command.js#L49
  3. 它在构造时为它制定了方法:https://github.com/aheckmann/gm/blob/master/lib/command.js#L34
  4. 它所做的一切 - a.push(arguments[i]); 然后将它连接到所有列表(到其他参数)。
  5. 就是这样。

然后当 write 被调用时:

  1. https://github.com/aheckmann/gm/blob/master/lib/command.js#L62
  2. 它获取参数列表self.args():https://github.com/aheckmann/gm/blob/master/lib/command.js#L78
  3. 它只是过滤掉一些保留字段:https://github.com/aheckmann/gm/blob/master/lib/command.js#L274
  4. 那么这些参数将被加入 _spawn 中,它被 write 调用:https://github.com/aheckmann/gm/blob/master/lib/command.js#L187
  5. 就是这样。

因此,基于此,任何对图像进行操作但不保存或保留其缓冲区的方法都不需要任何异步,因为它们实际上根本不做任何工作。所以这意味着 - 您确实需要担心它们。

旧:
对于任何繁重的处理工作,最好的方法是使用单独的进程
您可以创建另一个小的 node.js 进程,它将具有与主进程的一些通信能力(ZeroMQ 是这里的不错选择)。

必须通知这个单独的进程有关文件(路径)以及如何处理它,您可以轻松地从通过 ZeroMQ 做出此类决定的主进程发送该数据。

这种方法将允许您在主(网络?) Node 进程的工作方式上拥有独立性,并且将来有可能扩展到单独的硬件/实例。
这也是很好的做法(类 unix 应用程序逻辑分离)。

关于node.js - Node 的异步 GraphicsMagick,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17744288/

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