使用NodeJS的图像处理服务器

时间:2014-08-11 01:03:51

标签: node.js image-processing

我有一个服务于Web请求的NodeJS服务器,用户也可以将图像上传到我的服务器。我目前正在同一台服务器上处理这些图像。这真的是一个停止间隙的解决方案,直到我可以做更好的事情,因为图像处理占用了大量的CPU,我不想在我的网络服务器上这样做。

处理类型非常简单:

  1. 自动定位图像,将图像发布到处理服务器和 让它返回一个定向的图像。
  2. 创建缩略图,将图像发布到处理服务器并具有 它返回一个缩略图。
  3. 我希望能够将此图像处理服务器用于许多其他服务器。我也希望它以小内存/ CPU运行。 I.E.如果我有更多的CPU /内存可用,那么我不希望它在部署在资源有限的服务器上时崩溃。

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

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

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

    有些问题。

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

1 个答案:

答案 0 :(得分:0)

为什么不将这个过程分解为不连续的步骤。

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

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

  3. 执行图像处理。

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

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