【发布时间】:2013-05-15 02:22:44
【问题描述】:
我正在开发一个网站,我们希望用户能够在服务器上创建新进程并与服务器交互。例如,用户想要运行 C 代码:
#include<sdio.h>
int main()
{
int a;
scanf("%d", &a);
printf("%d", a);
}
在服务器中,我们创建一个进程并使其保持活动状态,直到该进程停止运行。当使用像exec 这样的函数时,我们不能做scanf 的事情。使用proc_open 时,我们无法让子进程保持活动状态......或者我们可以但我们不知道如何......
流程可以是:用户发送指令->服务器创建一个新进程来执行指令->执行指令时,服务器发送stdout到网页并从用户输入中获取stdin->进程停止运行..
【问题讨论】:
-
感觉像是
WebSocket的工作... -
Gearman 与 Supervisor 相结合可能会完成这项工作和/或类似 RabbitMQ/ZeroMQ 之类的东西,用于 Web 服务器和其他组件之间的异步通信。
-
@Passerby 是否可以创建一个可以继续运行的子进程?子进程如何在不使用
proc_open、exec、popen等的情况下运行上面的代码...我没有尝试过WebSocket.. -
@jamie0726 这不仅仅是一个交流的东西,而是在运行 shell 用户给出后保持子进程运行.. 它与齿轮人有点不同..
-
@dahui 问题是没有在后台运行进程;这是该过程必须与用户保持交互,因此用户必须与服务器保持实时连接。 HTTP 协议主要是一种请求和响应的风格,这不是很擅长。