【问题标题】:Image processing server using NodeJS使用 NodeJS 的图像处理服务器
【发布时间】:2014-10-25 05:18:23
【问题描述】:

我有一个提供 Web 请求的 NodeJS 服务器,用户也可以将图像上传到我的服务器。我目前正在同一台服务器上处理这些图像。这确实是一个权宜之计,直到我可以做得更好,因为图像处理会占用大量 CPU,而且我不想在我的网络服务器上这样做。

处理类型很简单:

  1. 自动定位图像,将图像 POST 到处理服务器并 让它返回一个定向图像。
  2. 创建缩略图,将图像 POST 到处理服务器并拥有 它返回一个缩略图。

我希望能够将此图像处理服务器用于许多其他服务器。我还希望它以很少的内存/cpu 运行。 IE。如果我有更多可用的 CPU/内存,那就太好了,但如果部署在资源有限的服务器上,我不希望它崩溃。

我目前处理这个问题的方式是我有一个配置文件,指定我可以同时处理多少张图像。如果我的资源非常有限,我将一次只处理 1 个图像,而将其余图像排队。现在这很好用,因为 Web 服务器和图像处理服务器是一体的。

我的独立图像处理服务器必须对请求进行“排队”,以便限制一次处理的图像数量。

我真的不想将图像存储在处理服务器上。主要是因为我的网络服务器知道数据结构(哪些图像属于哪些内容)。所以我真的很想向服务器发出请求并取回处理后的图像。

一些问题。

  1. NodeJS 实现是一个好的解决方案吗?
  2. 这应该是一个 RESTful http api。我想知道这一点,因为考虑到一次只处理一定数量的图像的要求,我不确定我是否可以完成它。如果我同时收到 15 个请求,我不知道该怎么做,我不想处理第一个请求,而其他请求则等待响应(处理后的图像)。
  3. 可以使用套接字将我的 Web 服务器与我的图像处理服务器连接起来,以避免出现问题 #2。这不是“功能强大”,因为它可能更难与其他服务器一起使用。但确实让我摆脱了上面#2 中的请求/响应问题。 IE 网络服务器可以推送要在套接字上处理的图像,并且处理服务器可以在完成后在套接字上回复。
  4. 是否有一些可以在 linux/unix 上运行的开源解决方案满足我的需求。这似乎是一个很常见的问题,实现起来应该很有趣,但如果我可以使用/贡献另一个产品,我会讨厌重新发明轮子。我见过Apace::ImageMagick,但我无法发布它们必须已经驻留在服务器上的图像。还有一些我无法使用的仅限 Windows 的解决方案。

请帮忙...

【问题讨论】:

  • 您使用的是 Linux 还是 Windows?在 Linux 上,您可以将 RAM 作为磁盘写入,然后使用 convert*-auto-orientate 生成这些图像。因为它是基于 RAM 的,所以几乎没有 I/O 瓶颈,只是 CPU 运行。

标签: node.js image-processing


【解决方案1】:

为什么不将流程分解为独立的步骤。

  1. 用户上传图片。获取某种确认消息,表明图像已成功上传并正在处理中。

  2. 将图像处理请求放入队列中。

  3. 执行图像处理。

  4. 通知用户图像处理完成。

这符合您的要求,因为用户可以在短时间内上传许多图像而不会使系统过载(他们只是进入队列),图像处理可以在单独的服务器上进行而无需移动文件)

【讨论】:

    猜你喜欢
    • 2017-03-11
    • 1970-01-01
    • 2014-08-22
    • 2010-09-13
    • 2011-02-04
    • 1970-01-01
    • 1970-01-01
    • 2021-04-12
    相关资源
    最近更新 更多