在php中调用正在运行的程序并获取响应 我创建了一个C++程序,需要用户输入。我想从php调用这个程序,并在我的网页上使用该程序的输出。 由于C++程序需要大量的时间来初始化,所以我想让它在后台运行,并在调用时响应PHP脚本。php脚本应该得到输出并显示在我的页面上。 可以这样做吗?< P>当然,可以做到,但是你可能需要写两个C或C++程序,一个在后台运行,一个是在你需要一些信息的时候由PHP程序启动的程序。虽然可能会提出一个只使用PHP的方案,但我并没有对此进行过太多的研究。无论哪种方式,对于“请求信息”的进程(PHP或C),我将使用术语“请求者”,对于实际响应信息的进程,我将使用术语“服务进程”

在php中调用正在运行的程序并获取响应 我创建了一个C++程序,需要用户输入。我想从php调用这个程序,并在我的网页上使用该程序的输出。 由于C++程序需要大量的时间来初始化,所以我想让它在后台运行,并在调用时响应PHP脚本。php脚本应该得到输出并显示在我的页面上。 可以这样做吗?< P>当然,可以做到,但是你可能需要写两个C或C++程序,一个在后台运行,一个是在你需要一些信息的时候由PHP程序启动的程序。虽然可能会提出一个只使用PHP的方案,但我并没有对此进行过太多的研究。无论哪种方式,对于“请求信息”的进程(PHP或C),我将使用术语“请求者”,对于实际响应信息的进程,我将使用术语“服务进程”,php,c++,daemon,Php,C++,Daemon,要在请求者和后台进程之间进行通信,需要使用一些IPC(进程间通信)机制。有很多选择。在这种情况下,命名管道听起来是一个合理的解决方案,并且命名管道在大多数操作系统中都是可用的(以及在例如Boost库中进行抽象,以便在需要时提供更具可移植性的解决方案) 因此,基本原则是: 后台服务进程启动(系统启动时自动启动) 服务流程创建命名管道(在双向模式下,或两个管道,每个方向一个-我在下面使用一个管道-根据需要调整“输入管道”和“输出管道”) 当需要时,请求程序进程打开命名管道并发送请求消息 服务进程将请

要在请求者和后台进程之间进行通信,需要使用一些IPC(进程间通信)机制。有很多选择。在这种情况下,命名管道听起来是一个合理的解决方案,并且命名管道在大多数操作系统中都是可用的(以及在例如Boost库中进行抽象,以便在需要时提供更具可移植性的解决方案)

因此,基本原则是:

  • 后台服务进程启动(系统启动时自动启动)
  • 服务流程创建命名管道(在双向模式下,或两个管道,每个方向一个-我在下面使用一个管道-根据需要调整“输入管道”和“输出管道”)
  • 当需要时,请求程序进程打开命名管道并发送请求消息
  • 服务进程将请求的信息发送回消息
  • 请求者关闭管道
  • 根据需要重复步骤2-5
  • 后台进程关闭,并作为其中一部分销毁命名管道(在系统关闭时自动)
    当然,上述7个步骤中的每一个都有许多“小步骤”,但总的来说,这几乎就是您想要做的。

    谢谢!我已经研究了一些IPC机制,我想我会尝试一下共享内存。程序初始化了大约600 MB的内存,读取来自命名管道的速度可能太慢了。但是,当然,每次从C++程序请求时,您不会提供600兆字节的数据,而仅仅是客户端实际请求的数据。只要数据在内存中(如果您的服务器中有足够的RAM,并且没有加载太多其他东西,那么应该是内存)。共享内存更难使用,因为您需要处理读/写问题(例如,当您在客户端读取数据时,服务程序会更新数据),我认为您是对的。我想我需要所有的数据,但我只需要后台进程来处理需要所有数据的请求,然后共享结果数据。事实上,这就是大多数这些事情的工作方式——我相信,例如MySQL使用命名管道来实现这一点(如果您需要多个客户端,也需要)[在任何给定的时间都有多个web会话],如果使用共享内存,它会变得更加混乱——除非共享内存只是一个永远不变的数据块)。