2010-11-22 37 views
1

这是问题...我想要用户上传一张照片,并且在用户上传照片后,我将会有一些过程,来分析这张照片的颜色。但是我不想在php上这样做......因为我有一个可以更快运行它的C程序。另外,我不希望用户等待结果。当计算机分析它时,我会通知用户,并得到用户想要的结果。我怎样才能实现它?任何想法或建议?谢谢。如果我想在Web应用程序中使用本机代码进行分析,我应该怎么做?

我对这种想法:

  1. 写数据库中的记录,当用户上传成功,例如 file001.jpg,也使一个状态, 例如,状态:分析
  2. C程序总是检查是否有新的上传 数据库
  3. 如果有新的上传,得到的文件001.jpg
  4. 在C程序完成分析例如:完成
  5. php程序使用ajax,不断拉取数据库,检查 的状态,如果状态改为 “完成”,提示并告诉用户。

您对这个实现有什么看法?

+1

你想看看`exec()` – 2010-11-22 16:07:31

回答

0

你的方法是完全有效的。本质上,你正在创建一个排队机制来分析上传的分析。您的网络应用程序验证上传,然后返回给用户,将条目写入数据库中的队列。

分析需要作为持续运行的守护程序运行,或者可能作为每x分钟/秒启动的cron作业运行。在设定的时间间隔内,它会查看作业队列以查看是否有工作要做,如果有,它会处理它。完成后,守护进程会更新数据库以将作业标记为已完成,并可能将与分析有关的新数据写入不同的表中。

不要忘记,如果您在后台有多个处理守护进程,您还需要将作业标记为“已启动”,以便第二个进程不会重复工作。

当用户返回页面时,会反映新状态。这可以根据您的建议通过Ajax民意测验“实时”完成,或者您可以考虑使用Comet方法(http://en.wikipedia.org/wiki/Comet_%28programming%29)保持实时连接。

0

如果您不想使用ImageMagick或GD,除非这些照片很大,否则您确实可以使用ImageMagick或GD,因此您处于正确的轨道上。如果C程序足够快,可以像Pekka所说的那样做,并使用exec()在初始线程中立即运行C proggy。

我最近刚刚做了这件事,检查照片是否适用于照片马赛克。我们用GD做到了这一点,它非常简单。我们使用resample将图像缩小到1个像素,然后从中获取颜色。不是100%完美,但对我们正在使用它的东西非常好。

0

Gearman [http://gearman.org/]可能对您有用。

Gearman提供了一个通用的应用程序框架,用于将工作转移到其他更适合执行此工作的机器或流程。它允许您并行执行工作,负载平衡处理以及在语言之间调用函数。

它支持C和PHP等语言。您可以使用C作为Gearman工作人员编写照片处理脚本。当PHP收到一个文件上传时,你可以告诉Gearman守护进程处理你的照片。然后,Gearman守护进程将选择一名可用的工作人员完成工作,并在工作完成后通知您。

它也将加快您的页面加载时间,因为客户端在将数据发送到浏览器之前不必等待照片处理完成。

相关问题