使Web服务器携带程序

时间:2013-04-24 08:41:24

标签: php web-services web-applications

我想要做的是:让服务器携带一个分析图片的程序(发送到Web服务器)并返回一个结果,程序已经存在并用C#和C ++编写。为了兴趣,该程序分析一个模式/网格,以确定对金属物体施加多大的压力,并且花费不超过一秒钟进行分析。

我想知道:

  1. 如何在Web服务器上存储程序(或者如何存储它以便我可以从Web服务器访问它)?
  2. 如何通过网络服务器调用该程序?
  3. 我想上面要求使用PHP等语言进行编程,但这段代码是在哪里编写/执行的?

2 个答案:

答案 0 :(得分:1)

我真的是用PHP代替网络服务器级别。

PHP有一个名为shell_exec的函数。该命令可以调用程序。

$result = shell_exec("./your_program ".escapeshellargs($image_path));

在网络服务器有权执行程序的情况下(应该是chmod模式755)。

(P.s。这应该适用于* nix,对于Windows我不确定)

(如果您无法在服务器上编译程序,请对其进行交叉编译然后上传)

答案 1 :(得分:0)

解决此问题的简单方法是在Web请求中同步运行程序(这意味着您的网页必须等待程序提供结果)。这意味着,在您的PHP页面(或控制器,如果您使用类似MVC的架构)中,您使用system()或类似的方式在服务器上运行您的程序。这可能会将结果输出到标准输出,或者输出到文件或数据库。如果你的程序运行一秒钟,这可能是一个可接受的延迟,只要你的用户数量很少。

要做到这一点:

  • 将控制台程序存储在服务器上的某个位置,“C:\ My Programs \ My Analyzer \ Analyser.exe”就可以了。
  • 您应该知道图像文件的路径位置。然后,您可以将该路径名作为参数传递给控制台程序。
  • 然后,您可以从stdout或其他地方检索呼叫结果,具体取决于您的控制台程序返回其分析的方式

也就是说,运行它的更好方法是运行作业服务器,以便您的程序以异步方式运行(这意味着您的作业服务器接受运行该程序的请求,并且它将在插槽空闲时运行。这意味着您的网页运行速度会更快,并且您的服务器不会因为太多人同时运行您的程序而过载。缺点是系统架构更复杂,您必须更改UI以应对未处理的作业。

如果您对设置作业服务器感兴趣,请考虑像Gearman这样的东西。您必须轮询服务器以查看是否已处理作业,或让您的作业进程向数据库写入完成标记,这可以通过您的Web脚本轻松检查。