如果我想在Web应用程序中使用本机代码进行分析,我该怎么办?

时间:2010-11-22 16:05:14

标签: php c system

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

我的想法:

  
      
  1. 例如,当用户上传成功时,在数据库中写入记录   file001.jpg,也是一个状态   例如,状态:分析
  2.   
  3. C程序始终检查是否有新的上传   数据库
  4.   
  5. 如果有新的上传,请获取file001.jpg
  6.   
  7. C程序完成分析后,更改状态   数据库,例如:完成
  8.   
  9. 使用ajax的php程序,不断拉数据库,检查   状态,如果状态更改为   “完成”,提示并告诉用户。
  10.   

您对此实施有何看法?

3 个答案:

答案 0 :(得分:0)

您的方法完全有效。基本上,您正在创建一个排队机制,以将分析与上载分离。您的Web应用程序验证上载,然后返回给用户,已经写入数据库中的队列条目。

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

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

当用户返回页面时,将反映新状态。这可以通过您建议的Ajax轮询“实时”完成,或者您可以使用Comet方法(http://en.wikipedia.org/wiki/Comet_%28programming%29)查看保持实时连接打开。 / p>

答案 1 :(得分:0)

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

我最近这样做了,检查照片是否有用于照片马赛克的全部颜色。我们用GD做到了这一点,而且非常简单。我们用重新采样将图像缩小到1像素,然后从中获取颜色。不是100%完美,但对于我们正在使用它的东西非常好。

答案 2 :(得分:0)

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

Gearman提供了一个通用的应用程序框架,可以将工作分配给更适合工作的其他机器或进程。它允许您并行工作,负载均衡处理以及在语言之间调用函数。

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

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