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

Php 如果我想在web应用程序中使用本机代码进行分析,我应该怎么做?,php,c,system,Php,C,System,这里是问题…我希望用户上传一张照片,在用户上传照片后,我会有一些过程,来分析这些照片的颜色。但我不想在php上这么做。。。因为我有一个C程序,可以运行得更快。另外,我不希望用户等待结果。当计算机分析它时,我会通知用户,并得到用户想要的结果。我如何实现它?有什么想法或建议吗?多谢各位 我的想法是: 例如,当用户上传成功时,在数据库中写入记录 file001.jpg,也可以创建一个状态,用于 例如,现状:分析 C程序总是检查是否有来自的新上载 数据库 如果有新的上传,请获取file001.jpg C

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

我的想法是:

  • 例如,当用户上传成功时,在数据库中写入记录 file001.jpg,也可以创建一个状态,用于 例如,现状:分析
  • C程序总是检查是否有来自的新上载 数据库
  • 如果有新的上传,请获取file001.jpg
  • C程序完成分析后,在中更改状态 数据库,例如:finish
  • php程序使用ajax,不断拉数据库,检查 状态,如果状态更改为 “完成”,提示并告诉用户

  • 您对这个实现有何看法?

    您的方法非常有效。实际上,您正在创建一个队列机制,以将分析与上载分离。您的web应用程序将验证上载,然后将条目写入数据库中的队列后返回给用户

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

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


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

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

    我最近刚刚做了这件事,检查一张照片的整体颜色,以便在照片马赛克中使用。我们用GD做了这件事,这很简单。我们通过重采样将图像缩小到1像素,然后从中提取颜色。虽然不是100%完美,但对于我们使用它的目的来说相当不错。

    Gearman[]可能对您有用

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

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


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

    您想查看
    exec()